解决 PJBlog 不能上传文件 提示文件格式非法的问题

PJBlog3 v3.2.9的修改方法:
  修改一:打开 attachment.asp,因为不再使用无组件上传,故第四行的 <!--#include file="common/upfile.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("<div style=""padding:6px""><a href='attachment.asp'>文件大小超出,请返回重新上传</a></div>")
        ElseIf IsvalidFile(UCase(F_Type)) = False Then
            F_File.Delete    '删除失败文件 2007-05-07
            Response.Write("<div style=""padding:6px""><a href='attachment.asp'>文件格式非法,请返回重新上传</a></div>")
        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 "<script>addUploadItem('"&F_Type&"','download.asp?id="&UploadID&"',"&Request.QueryString("MSave")&")</script>"
            Response.Write("<div style=""padding:6px""><a href='attachment.asp'>文件上传成功,请返回继续上传</a></div>")
        End If
'-------- End --------


以下是PJBlog2 v2.6的修改方法:
引用内容 引用内容
  PJBolg 除了上传了 ASP 等不允许的文件类型提示非法类型外,大多数情况是因为文件超出了允许的大小,而即使在后台设置了更大的允许数值也是与事无补,因为 PJBlog 上传使用了无组件上传的方式(化境ASP无组件上传类),而无组件上传的致命弱点就是不能上传超过 200KB 的文件。
  网上有很多通过设置 IIS 来解决的方法,但要让空间提供商为你去重设 IIS 配置谈何容易,至少也是件费口舌的麻烦事。而比较好的方法是自己修改 attachment.asp 使用其它组件来实现大文件上传。我使用的空间支持 ASPUpload 组件,所以改成使用这个组件来上传文件了。如果你的空间也支持 ASPUpload 那恭喜,抄一下啦,不过我也是才疏学浅,如有错误或不妥还请告之。
  为了方便恢复,原来已不适用的代码我并没有删除,只是用 ' 屏蔽掉了,也要比较一下二种上传方式的不同:)

  修改一:打开 attachment.asp,因为不再使用无组件上传,故第四行的 <!--#include file="common/upfile.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("<div style=""padding:6px""><a href='attachment.asp'>文件大小超出,请返回重新上传</a></div>")
ElseIF IsvalidFile(UCase(F_Type)) = False Then    
    F_File.Delete    '删除失败文件 2007-05-07
    Response.Write("<div style=""padding:6px""><a href='attachment.asp'>文件格式非法,请返回重新上传</a></div>")
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 "<script>addUploadItem('"&F_Type&"','attachments/"&D_Name&"/"&F_Name&"',"&Request.QueryString("MSave")&")</script>"
    Response.Write("<div style=""padding:6px""><a href='attachment.asp'>文件上传成功,请返回继续上传</a></div>")
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 优化 控件 网页 VBscri&#112;t PJBlog VBS 非法 上传
相关日志:
评论: 4 | 引用: 0 | 查看次数: 11539
parno
parno[2008-12-03 00:07 AM | | | 117.82.4.152 | del | 取消审核 | 回复回复]
4#
minglam310 上传不能超过服务器分配你的总空间, 还要看一下 Blog 版本是不是不一样, 不同版本可能有问题, 还有就是据说 Windows 2003 服务器有上传文件 200K 限止, 具体我不太清楚. 工作繁忙, 恕我不能给予 QQ 指导支持... :S
minglam310
minglam310[2008-12-02 02:41 PM | | | 218.19.119.227 | del | 取消审核 | 回复回复]
地板
我也出现这个问题。。改了设置也没用         怎么做?加我q。。谢谢~343161814
parno
parno[2008-10-04 12:57 AM | | | 114.216.239.237 | del | 取消审核 | 回复回复]
板凳
calis 你先到后台看看用户的上传限止,在用户和权限栏目>编辑权限,把上传限止改大些,比如102400000字节。然后就是要检查一下超时值的,源代码的Server.ScriptTimeOut = 999 改一下,设置更大的超时值,比如:Server.ScriptTimeOut=50000000。
calis
calis[2008-09-23 09:25 AM | | | 125.77.159.24 | del | 取消审核 | 回复回复]
沙发
楼主。按你的这些步骤操作后。倒不提示“文件格式非法了”。变成“文件超出大小”
我才上传2M哩。。。
怎么整呢。能不能帮忙下呀
QQ 373746208
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 邮件地址支持Gravatar头像,邮箱地址不会公开.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 500 字 | UBB代码 关闭 | [img]标签 关闭