原创日志

关于asp老网站放到windows 2012服务器上遇到的一个上传问题,艾恩ASP无组件上传类(An-Upload v9)

[ 2023-03-03 13:40:14 | 作者: admin ]
字号: | |
朋友有个古董级网站转移到阿里云,windows2012的系统,反馈说上传有问题。
网站在win2003下确实正常,在windows2012上无法上传图片。修改了iis中asp的200k限制还不行,就下载代码之后到本地进行调试。
测试发现代码是asp,上传部分使用了艾恩ASP无组件上传类(An-Upload v9)

代码还用到多文件上传,获取分隔符,然后二进制截取分隔符的方式来分离出多个文件
调试发现错误语句
fileCls.value =midb(tempdata,formend + 4,valueend - formend - 6)
发现里面的 valueend=0,导致第3参数为负数,函数出错。
再回溯,
valueend = InStrB(formend + 3, tempdata, sSplit)
valueend=0表示原始读取的二进制字符串中不包含分隔符,逻辑上是不对的,
使用二进制输出的方式打印二进制字符串 tempdata 是否包含二进制分隔符 sSplit
response.BinaryWrite(sSplit)
response.BinaryWrite(tempdata)

发现 tempdata 中的分隔符是存在大小写,而sSplit中为小写
Content-Disposition: form-data; name="file12303031316540322"; filename="new.gif"
Content-Type: image/gif
GIF89a
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
------WebKitFormBoundaryYaAhUi28uCNtFTFr--
对比sSplit字符串
------webkitformboundaryyaahui28ucntftfr

然后找到 sSplit = StrToBin(vboundary)

接着回溯
  '==============================
  '检测上传类型是否为multipart/form-data
  '==============================
  Private Function checkEntryType()
    Dim ContentType, ctArray, bArray,RequestMethod
    RequestMethod=trim(LCase(Request.ServerVariables("REQUEST_METHOD")))
    if RequestMethod="" or RequestMethod<>"post" then
      checkEntryType = False
      exit function
    end if
    ContentType = LCase(Request.ServerVariables("HTTP_CONTENT_TYPE")) '问题在这一行,转小写了
    ctArray = Split(ContentType, ";")
    if ubound(ctarray)>=0 then
      If Trim(ctArray(0)) = "multipart/form-data" Then
      checkEntryType = True
      vboundary = Split(ContentType,"boundary=")(1)
      vboundary = "--"&vboundary '头部获取的boundary与文件分隔符并不一致,前面可以增加--
      'response.write vboundary
      'response.End()
      Else
      checkEntryType = False
      End If
    else
      checkEntryType = False
    end if
  End Function

修改也简单,直接把下面这句
ContentType = LCase(Request.ServerVariables("HTTP_CONTENT_TYPE"))
修改为
ContentType = Request.ServerVariables("HTTP_CONTENT_TYPE")
就可以了


分析原因:
老版本系统文件分隔符都是小写,所以运行没有问题,但是windows2012系统分隔符存在大小写就报错了。
[最后修改由 admin, 于 2023-03-10 14:49:52]
评论Feed 评论Feed: http://blog.xg98.com/feed.asp?q=comment&id=2921

这篇日志没有评论。

此日志不可发表评论。