返回列表 发帖

IIS6 中ASP上传文件大小限制为200K的问题

这两天研究ASP上传。发现一提交大于200K的数据就会[color=#FF0033] 500错误,我汗S。。在网上找了很久,都是通过[color=#FF0033]修改IIS配置解决的。。

我想通过自己写个函数来实现。求思路~!

IIS6 中ASP上传文件大小限制为200K的问题

做东西就这样啊。。
我们麻烦就是为了方便更多的人嘛。。
咳。。表吐。。

TOP

IIS6 中ASP上传文件大小限制为200K的问题

麻烦内

TOP

IIS6 中ASP上传文件大小限制为200K的问题

通过分析文件头数据,得到文件本地路径,文件名,扩展名,文件类型,表单域名称。并以原文件名将文件保存到服务器。
  1. <%
  2. Dim ReadBytes,ToRead,Err_Code,strFileData,strUpLoadData
  3. Dim bCrLf,strSeparator,intSeparator
  4. Dim File_start,File_end,File_SavePath,strItem,strItemName,intTemp,strTemp
  5. Dim strFileType,strFileName,strFileExt,LngFilesize
  6. File_SavePath=""
  7. ';回车换行符的二进制数据
  8. bCrLf=ChrB(13)&ChrB(10)
  9. ReadBytes=0
  10. ToRead = 200000
  11. ';建立对象
  12. Set objStream=Server.CreateObject("ADODB.Stream")
  13. Set binItem=Server.CreateObject("ADODB.Stream")
  14. ';指定返回数据类型 adTypeBinary=1,adTypeText=2
  15. objStream.Type=1
  16. ';指定打开模式 adModeRead=1,adModeWrite=2,adModeReadWrite=3
  17. objStream.Mode=3
  18. objStream.Open
  19. binBytes=Request.TotalBytes
  20. if binBytes=0 then
  21. ';错误输出:没有上传任何数据
  22. Err_Code=0
  23. Response.End
  24. End if
  25. ';判断提交的数据是否超过限制,如果没有则按原大小读取
  26. Do while ReadBytes < binBytes
  27. ';提交的数据或最后一次所取数据可能不足200K,加个判断即可取得精确数据长度
  28. if ToRead > binBytes-Readbytes then
  29. ToRead=binBytes-Readbytes
  30. end if
  31. objStream.Write Request.BinaryRead(Toread)
  32. Readbytes=Readbytes+ToRead
  33. Loop
  34. ';设置对象指针位置
  35. objStream.Position=0
  36. objStream.Type=2
  37. strUpLoadData=objStream.ReadText
  38. ';取得分界符的长度
  39. intSeparator=InstrB(1,strUpLoadData,bCrLf)-1
  40. ';取得分界符
  41. strSeparator=LeftB(strUpLoadData,intSeparator)
  42. ';数据块开始位置=分界符长度加上1个回车符,再加上一个文件块的首字符
  43. File_start=intSeparator+2
  44. ';在两个回车符处结束,获得数据头部信息
  45. File_end =InStrB(File_start,strUpLoadData,bCrLf&bCrLf)+3
  46. ';指定binItem对象返回的数据为二进制
  47. binItem.Type=1
  48. ';打开对象
  49. binItem.Open
  50. ';设置objStream对象当前指针位置
  51. objStream.Position=File_start
  52. ';将objStream中的第一段数据复制入binItem中
  53. objStream.CopyTo binItem,File_end-File_start
  54. binItem.Position=0
  55. binItem.Type=2
  56. binItem.Charset="gb2312"
  57. strItem=binItem.ReadText
  58. binItem.Close()
  59. ';下一段数据开始位置
  60. File_start=File_end
  61. ';下一块的结束位置,注意要减去一个分界符位
  62. File_end=InStrB(File_start,strUpLoadData,strSeparator)-1
  63. binItem.Type=1
  64. binItem.Open
  65. ';重置objStream指针位置
  66. objStream.Position=File_start
  67. ';数据块长度
  68. LngFilesize=File_end-File_start-2
  69. ';将文件数据拷入binItem
  70. objStream.CopyTo binItem,LngFilesize
  71. ';以上暂缓
  72. ';下面进行头部分析工作
  73. ';39是“Content-Disposition: form-data; name="”的长度,在此后面找到的第一个双引号为表单域名结束
  74. intTemp=Instr(39,strItem,"""")
  75. ';取得表单域名
  76. strItemName=Mid(strItem,39,intTemp-39)
  77. ';从表单域名后开始查找文件名
  78. if Instr(intTemp,strItem,"filename=""")<>0 then
  79. intTemp=intTemp+13
  80. ';获取文件类型即第一块中“Content-Type: ”的位置+14
  81. strFileType=Mid(strItem,Instr(intTemp,strItem,"Content-Type: ")+14)
  82. ';得到文件完整源路径
  83. strTemp=Mid(strItem,intTemp,Instr(intTemp,strItem,"""")-intTemp)
  84. intTemp=InstrRev(strTemp,"\")
  85. ';得到文件名
  86. strFileName=Mid(strTemp,intTemp+1)
  87. End if
  88. ';取得文件扩展名
  89. if Instr(intTemp,strTemp,".")<>0 then
  90. strFileExt=Mid(strTemp,InstrRev(strTemp,".")+1)
  91. else
  92. strFileExt=""
  93. end if
  94. Response.Write "源路径:" & strTemp
  95. Response.Write "<br>文件名:" & strFileName
  96. Response.Write "<br>扩展名:" & strFileExt
  97. Response.Write "<br>文件类型:" & strFileType
  98. Response.Write "<br>文件大小:" & LngFileSize &"字节"
  99. Response.Write "<br>表单域名:" & strItemName
  100. ';储存文件
  101. binItem.SaveToFile Server.MapPath(File_SavePath&strFileName)
  102. binItem.close
  103. objStream.close
  104. %>
复制代码
以上代码仅实现了单个大文件的上传。其它功能有待扩充。。谢谢关注~!

TOP

IIS6 中ASP上传文件大小限制为200K的问题

[这个贴子最后由chinanic在 2007/01/30 08:09pm 第 1 次编辑] ·今天用ADODB.Stream实现了数据分块读取,哈哈。。可以传200K以上的文件啦。。 ·下一步要实现的是文件数据的提取。。嗯,就是分析那堆乱码啦。。 ·以下代码实现大文件上传,仅供参考。。 ·另ADODB.Stream貌似消耗服务器资源的说。。希望朋友们帮想一下其它办法。 :14:
  1. <%
  2. Dim ReadBytes,ToRead,Err_Code
  3. ReadBytes=0
  4. ToRead = 200000
  5. Set objStream=Server.CreateObject("ADODB.Stream")
  6. ';指定返回数据类型 adTypeBinary=1,adTypeText=2
  7. objStream.Type=1
  8. ';指定打开模式 adModeRead=1,adModeWrite=2,adModeReadWrite=3
  9. objStream.Mode=3
  10. objStream.Open
  11. binBytes=Request.TotalBytes
  12. ';以下两句用来显示提交数据长度
  13. Response.write "<br>"
  14. Response.write binBytes
  15. if binBytes=0 then
  16. ';错误输出:没有上传任何数据
  17. Err_Code=0
  18. Response.End
  19. End if
  20. ';循环读取提交的数据
  21. Do while ReadBytes < binBytes
  22. ';提交的数据或最后一次所取数据可能不足200K,加个判断即可取得精确数据长度
  23. if ToRead > binBytes-Readbytes then
  24. ToRead=binBytes-Readbytes
  25. end if
  26. objStream.Write Request.BinaryRead(Toread)
  27. Readbytes=Readbytes+ToRead
  28. Loop
  29. objStream.Position=0
  30. objStream.Type=1
  31. ';建立输出对象
  32. Set outStream=Server.CreateObject("ADODB.Stream")
  33. outStream.Type=1
  34. outStream.Open
  35. objStream.CopyTo outStream
  36. ';设置输出对象的指针位置
  37. outStream.Position=0
  38. outStream.Type=2
  39. ';读取对象内容,存入变量
  40. strItem=outStream.ReadText
  41. Response.binarywrite strItem
  42. ';关闭对象
  43. outStream.close
  44. objStream.close
  45. %>
复制代码

TOP

IIS6 中ASP上传文件大小限制为200K的问题

发现可以用ADODB.Stream对象分块读取,只要每次读的字节数小于200K就行了。
但郁闷的是得到的数据仅限头部那一点点,我晕。。。
继续研究中。。

TOP

IIS6 中ASP上传文件大小限制为200K的问题

晕。偶是要换自己写的组件。。就是不知道怎样写。。所以来讨下经验。。

TOP

IIS6 中ASP上传文件大小限制为200K的问题

修改了 也没用
不如换上传组建

TOP

返回列表 回复 发帖