解决 PJBlog 不能上传文件 提示文件格式非法的问题
作者:parno 日期:2007-03-31
PJBlog3 v3.2.9的修改方法:
修改一:打开 attachment.asp,因为不再使用无组件上传,故第四行的 可以删除先。
修改二:查找源码,将在 Dim FileUP 和Set F_File=Nothing 之间的代码换成:
以下是PJBlog2 v2.6的修改方法:
修改一:打开 attachment.asp,因为不再使用无组件上传,故第四行的 可以删除先。
修改二:查找源码,将在 Dim FileUP 和Set F_File=Nothing 之间的代码换成:
复制内容到剪贴板 程序代码
'-------- Start --------
'Set FileUP = New Upload_File
Set FileUP = server.createobject("Persits.Upload")
FileUP.CodePage = 65001 '代码页为UTF-8
FileUP.OverwriteFiles = False '不复盖已有文件,通常不会有同名文件的,仅预防
FileUP.RegKey = "41133-90544-38797" 'ASPUpload 的注册码:P
'FileUP.GetDate( -1)
Dim F_File, F_Type, sy, FilePath, AntiDown
FileUP.Save(Server.MapPath("attachments/"&D_Name)) '保存文件先
Set F_File = FileUP.Files("File")
sy = FileUp.Form("sy") '水印类型
AntiDown = FileUp.Form("AntiDown") '防盗链
'blog_UpLoadSet = "0|0|0|PJBlog|PJBlog|0|1|10|10|FFFFFF|0|10|10|0.5|images/wind.png|120|35|www.pjhome.net|FFFFFF|18|宋体|1|0|000000|0|0"
'防盗链|文件命名|文件命名2|前缀|后缀|水印位置|计数边距|离左边距|离顶边距|边框颜色|边框宽度|水平边距|垂直边距|透明度|图片水印|图宽|图高|文字|字体颜色|字体大小|字体类型|加粗|斜体|阴影颜色|阴影向右偏移量|阴影向下偏移量
' 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Select Case Split(blog_UpLoadSet,"|")(1)
Case 0 '上传日期时间
F_Name = Year(now)&lenNum(Month(now))&lenNum(Day(now))&lenNum(Hour(now))& lenNum(Minute(now))&lenNum(Second(now))
Case 1 '文件原名
F_Name = getF_Name(F_File.FileName)
Case 2 '上传日期时间_文件原名
F_Name = Year(now)&lenNum(Month(now))&lenNum(Day(now))&lenNum(Hour(now))& lenNum(Minute(now))&lenNum(Second(now))&"_"&getF_Name(F_File.FileName)
Case 3 '上传日期时间带-
F_Name = Year(now)&"-"&lenNum(Month(now))&"-"&lenNum(Day(now))&"-"&lenNum(Hour(now))&"-"&lenNum(Minute(now))&"-"&lenNum(Second(Now))&"-"&randomStr(1)
Case Else '原系统默认
F_Name = randomStr(1)&Year(Now)&Month(Now)&Day(Now)&Hour(Now)&Minute(Now)&Second(Now)
End Select
Select Case Split(blog_UpLoadSet,"|")(2)
Case 0 '类型
F_Name = F_Name
Case 1 '前缀_类型
F_Name = Split(blog_UpLoadSet,"|")(3)&"_"&F_Name
Case 2 '类型_后缀
F_Name = F_Name&"_"&Split(blog_UpLoadSet,"|")(4)
Case 3 '前缀_类型_后缀
F_Name = Split(blog_UpLoadSet,"|")(3)&"_"&F_Name&"_"& Split(blog_UpLoadSet,"|")(4)
End Select
F_Name = F_Name&""&F_File.Ext
F_Type = FixName(F_File.Ext)
If F_File.Size > Int(UP_FileSize) Then
F_File.Delete '删除失败文件 2007-05-07
Response.Write("")
ElseIf IsvalidFile(UCase(F_Type)) = False Then
F_File.Delete '删除失败文件 2007-05-07
Response.Write("")
Else
FilePath = "attachments/"&D_Name&"/"&F_Name
'F_File.SaveAs Server.MapPath(FilePath)
F_File.Move Server.MapPath(FilePath) '使用 ASPUpload 的改名方法生成 PJBolg 的文件名样式
If UCase(F_Type) = "JPG" or UCase(F_Type) = "BMP" or UCase(F_Type) = "GIF" Then
If sy <> "" And IsNumeric(sy) Then Call CreateView(FilePath,sy,blog_UpLoadSet)
End If
Conn.Execute("Insert INTO blog_Files (FilesPath) VALUES ("""&FilePath&""")")
Dim UploadID : UploadID = Conn.Execute("Select ID FROM blog_Files order by ID desc")(0)
If AntiDown = "1" then UploadID = UploadID&"&code="&right(md5(right(Ucase(FilePath),15)),10)
response.Write ""
Response.Write("")
End If
'-------- End --------
'Set FileUP = New Upload_File
Set FileUP = server.createobject("Persits.Upload")
FileUP.CodePage = 65001 '代码页为UTF-8
FileUP.OverwriteFiles = False '不复盖已有文件,通常不会有同名文件的,仅预防
FileUP.RegKey = "41133-90544-38797" 'ASPUpload 的注册码:P
'FileUP.GetDate( -1)
Dim F_File, F_Type, sy, FilePath, AntiDown
FileUP.Save(Server.MapPath("attachments/"&D_Name)) '保存文件先
Set F_File = FileUP.Files("File")
sy = FileUp.Form("sy") '水印类型
AntiDown = FileUp.Form("AntiDown") '防盗链
'blog_UpLoadSet = "0|0|0|PJBlog|PJBlog|0|1|10|10|FFFFFF|0|10|10|0.5|images/wind.png|120|35|www.pjhome.net|FFFFFF|18|宋体|1|0|000000|0|0"
'防盗链|文件命名|文件命名2|前缀|后缀|水印位置|计数边距|离左边距|离顶边距|边框颜色|边框宽度|水平边距|垂直边距|透明度|图片水印|图宽|图高|文字|字体颜色|字体大小|字体类型|加粗|斜体|阴影颜色|阴影向右偏移量|阴影向下偏移量
' 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Select Case Split(blog_UpLoadSet,"|")(1)
Case 0 '上传日期时间
F_Name = Year(now)&lenNum(Month(now))&lenNum(Day(now))&lenNum(Hour(now))& lenNum(Minute(now))&lenNum(Second(now))
Case 1 '文件原名
F_Name = getF_Name(F_File.FileName)
Case 2 '上传日期时间_文件原名
F_Name = Year(now)&lenNum(Month(now))&lenNum(Day(now))&lenNum(Hour(now))& lenNum(Minute(now))&lenNum(Second(now))&"_"&getF_Name(F_File.FileName)
Case 3 '上传日期时间带-
F_Name = Year(now)&"-"&lenNum(Month(now))&"-"&lenNum(Day(now))&"-"&lenNum(Hour(now))&"-"&lenNum(Minute(now))&"-"&lenNum(Second(Now))&"-"&randomStr(1)
Case Else '原系统默认
F_Name = randomStr(1)&Year(Now)&Month(Now)&Day(Now)&Hour(Now)&Minute(Now)&Second(Now)
End Select
Select Case Split(blog_UpLoadSet,"|")(2)
Case 0 '类型
F_Name = F_Name
Case 1 '前缀_类型
F_Name = Split(blog_UpLoadSet,"|")(3)&"_"&F_Name
Case 2 '类型_后缀
F_Name = F_Name&"_"&Split(blog_UpLoadSet,"|")(4)
Case 3 '前缀_类型_后缀
F_Name = Split(blog_UpLoadSet,"|")(3)&"_"&F_Name&"_"& Split(blog_UpLoadSet,"|")(4)
End Select
F_Name = F_Name&""&F_File.Ext
F_Type = FixName(F_File.Ext)
If F_File.Size > Int(UP_FileSize) Then
F_File.Delete '删除失败文件 2007-05-07
Response.Write("")
ElseIf IsvalidFile(UCase(F_Type)) = False Then
F_File.Delete '删除失败文件 2007-05-07
Response.Write("")
Else
FilePath = "attachments/"&D_Name&"/"&F_Name
'F_File.SaveAs Server.MapPath(FilePath)
F_File.Move Server.MapPath(FilePath) '使用 ASPUpload 的改名方法生成 PJBolg 的文件名样式
If UCase(F_Type) = "JPG" or UCase(F_Type) = "BMP" or UCase(F_Type) = "GIF" Then
If sy <> "" And IsNumeric(sy) Then Call CreateView(FilePath,sy,blog_UpLoadSet)
End If
Conn.Execute("Insert INTO blog_Files (FilesPath) VALUES ("""&FilePath&""")")
Dim UploadID : UploadID = Conn.Execute("Select ID FROM blog_Files order by ID desc")(0)
If AntiDown = "1" then UploadID = UploadID&"&code="&right(md5(right(Ucase(FilePath),15)),10)
response.Write ""
Response.Write("")
End If
'-------- End --------
以下是PJBlog2 v2.6的修改方法:
引用内容
PJBolg 除了上传了 ASP 等不允许的文件类型提示非法类型外,大多数情况是因为文件超出了允许的大小,而即使在后台设置了更大的允许数值也是与事无补,因为 PJBlog 上传使用了无组件上传的方式(化境ASP无组件上传类),而无组件上传的致命弱点就是不能上传超过 200KB 的文件。
网上有很多通过设置 IIS 来解决的方法,但要让空间提供商为你去重设 IIS 配置谈何容易,至少也是件费口舌的麻烦事。而比较好的方法是自己修改 attachment.asp 使用其它组件来实现大文件上传。我使用的空间支持 ASPUpload 组件,所以改成使用这个组件来上传文件了。如果你的空间也支持 ASPUpload 那恭喜,抄一下啦,不过我也是才疏学浅,如有错误或不妥还请告之。
为了方便恢复,原来已不适用的代码我并没有删除,只是用 ' 屏蔽掉了,也要比较一下二种上传方式的不同:)
修改一:打开 attachment.asp,因为不再使用无组件上传,故第四行的 可以删除先。
修改二:查找源码,将在 Dim FileUP 和Set F_File=Nothing 之间的代码换成:
好了上传吧!几十M的文件没问题,上百M或上G的文件也许要将原代码的 Server.ScriptTimeOut = 999 改一下,设置更大的超时值,比如:Server.ScriptTimeOut=50000000。
以上修改在 PJBlog2 v2.6 build 02 + ASPUpload 3.0 测试通过。
网上有很多通过设置 IIS 来解决的方法,但要让空间提供商为你去重设 IIS 配置谈何容易,至少也是件费口舌的麻烦事。而比较好的方法是自己修改 attachment.asp 使用其它组件来实现大文件上传。我使用的空间支持 ASPUpload 组件,所以改成使用这个组件来上传文件了。如果你的空间也支持 ASPUpload 那恭喜,抄一下啦,不过我也是才疏学浅,如有错误或不妥还请告之。
为了方便恢复,原来已不适用的代码我并没有删除,只是用 ' 屏蔽掉了,也要比较一下二种上传方式的不同:)
修改一:打开 attachment.asp,因为不再使用无组件上传,故第四行的 可以删除先。
修改二:查找源码,将在 Dim FileUP 和Set F_File=Nothing 之间的代码换成:
复制内容到剪贴板 程序代码
'-------- Start --------
'Set FileUP=New Upload_File
Set FileUP = Server.CreateObject("Persits.Upload") '生成 ASPUpload 对象
FileUP.CodePage = 65001 '代码页为UTF-8
FileUP.OverwriteFiles = False '不复盖已有文件,通常不会有同名文件的,仅预防
FileUP.RegKey = "41133-90544-38797" 'ASPUpload 的注册码:P
'FileUP.GetDate(-1)
Dim F_File,F_Type
'Set F_File=FileUP.File("File")
FileUP.Save(Server.MapPath("attachments/"&D_Name)) '保存文件先
Set F_File = FileUP.Files("File") '生成 ASPUpload 文件对象
'F_Name=randomStr(1)&Year(now)&Month(now)&Day(now)&Hour(now)&Minute(now)&Second(now)&"."&F_File.FileExt
F_Name=randomStr(1)&Year(now)&Month(now)&Day(now)&Hour(now)&Minute(now)&Second(now)&F_File.Ext '生成新文件名,相比上一条以前的代码只是少个点(.)
'F_Type=FixName(F_File.FileExt)
F_Type=FixName(F_File.Ext) 'ASPUpload 的得扩展名的方法语法和原来的不一样有点
'IF F_File.FileSize > Int(UP_FileSize) Then
IF F_File.Size > Int(UP_FileSize) Then '看看文件是不是超过允许的范围,文件大小的语法也有点差别
F_File.Delete '删除失败文件 2007-05-07
Response.Write("")
ElseIF IsvalidFile(UCase(F_Type)) = False Then
F_File.Delete '删除失败文件 2007-05-07
Response.Write("")
Else
'F_File.SaveAs Server.MapPath("attachments/"&D_Name&"/"&F_Name)
F_File.Move Server.MapPath("attachments/"&D_Name&"/"&F_Name) '使用 ASPUpload 的改名方法生成 PJBolg 的文件名样式
response.write ""
Response.Write("")
End IF
'-------- End --------
'Set FileUP=New Upload_File
Set FileUP = Server.CreateObject("Persits.Upload") '生成 ASPUpload 对象
FileUP.CodePage = 65001 '代码页为UTF-8
FileUP.OverwriteFiles = False '不复盖已有文件,通常不会有同名文件的,仅预防
FileUP.RegKey = "41133-90544-38797" 'ASPUpload 的注册码:P
'FileUP.GetDate(-1)
Dim F_File,F_Type
'Set F_File=FileUP.File("File")
FileUP.Save(Server.MapPath("attachments/"&D_Name)) '保存文件先
Set F_File = FileUP.Files("File") '生成 ASPUpload 文件对象
'F_Name=randomStr(1)&Year(now)&Month(now)&Day(now)&Hour(now)&Minute(now)&Second(now)&"."&F_File.FileExt
F_Name=randomStr(1)&Year(now)&Month(now)&Day(now)&Hour(now)&Minute(now)&Second(now)&F_File.Ext '生成新文件名,相比上一条以前的代码只是少个点(.)
'F_Type=FixName(F_File.FileExt)
F_Type=FixName(F_File.Ext) 'ASPUpload 的得扩展名的方法语法和原来的不一样有点
'IF F_File.FileSize > Int(UP_FileSize) Then
IF F_File.Size > Int(UP_FileSize) Then '看看文件是不是超过允许的范围,文件大小的语法也有点差别
F_File.Delete '删除失败文件 2007-05-07
Response.Write("")
ElseIF IsvalidFile(UCase(F_Type)) = False Then
F_File.Delete '删除失败文件 2007-05-07
Response.Write("")
Else
'F_File.SaveAs Server.MapPath("attachments/"&D_Name&"/"&F_Name)
F_File.Move Server.MapPath("attachments/"&D_Name&"/"&F_Name) '使用 ASPUpload 的改名方法生成 PJBolg 的文件名样式
response.write ""
Response.Write("")
End IF
'-------- End --------
好了上传吧!几十M的文件没问题,上百M或上G的文件也许要将原代码的 Server.ScriptTimeOut = 999 改一下,设置更大的超时值,比如:Server.ScriptTimeOut=50000000。
以上修改在 PJBlog2 v2.6 build 02 + ASPUpload 3.0 测试通过。
[本日志由 Admin 于 2017-05-18 04:15 AM 更新]
上一篇: Vista 移植到 XP 的漂亮的屏幕保护程序下一篇: 经典 Adobe Photoshop 滤镜四款
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: ASP 优化 控件 网页 VBscript PJBlog VBS 非法 上传
相关日志:
评论: 4 | 引用: 0 | 查看次数: 12530
parno[2008-12-03 00:07 AM | | | 117.82.4.152 | | 取消审核 | 回复]
4#minglam310 上传不能超过服务器分配你的总空间, 还要看一下 Blog 版本是不是不一样, 不同版本可能有问题, 还有就是据说 Windows 2003 服务器有上传文件 200K 限止, 具体我不太清楚. 工作繁忙, 恕我不能给予 QQ 指导支持... :S
地板
我也出现这个问题。。改了设置也没用 怎么做?加我q。。谢谢~343161814
发表评论