注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

水滴石穿

破浪是阵风!

 
 
 

日志

 
 

解决无组件上传大文件的问题  

2011-08-22 09:30:03|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
    asp网站在iis6.0系统无法上传大文件,提示出错信息:“quest 对象 错误 'ASP 0101 : 80004005”,后来在网上搜索,想从谷歌或百度找出答案,但答案无非都是关联到win2003经典的 “200KB” 大小限制上。

    开始我也是这样认为,按照说明将MetaBase.xml中进行了相关设置:AspMaxRequestEntityAllowed="204800000" '-----最大200MB,但还是不行,最后猜测应该是Request.BinaryRead自身限制所致。后来从带进度条的无组件上传的分段传输得到启发, 原来BinaryRead方法不仅是可以读取指定大小,而且可以连续读取的。今天我就此进行了验证,发现确实可行:

    PowerEasy.Upfile.asp中关于BinaryRead读取的原文片断为:

    Set Forms = Server.CreateObject("Scripting.Dictionary")
    Forms.CompareMode = 1
    Set Files = Server.CreateObject("Scripting.Dictionary")
    Files.CompareMode = 1
    Set tStream = Server.CreateObject("ADODB.Stream")
    Set oUpFilestream = Server.CreateObject("ADODB.Stream")
    oUpFilestream.Type = 1
    oUpFilestream.Mode = 3
    oUpFilestream.Open
    oUpFilestream.Write Request.BinaryRead(Request.TotalBytes)
    oUpFilestream.Position = 0
    RequestBinDate = oUpFilestream.Read
    iFormEnd = oUpFilestream.size

    我将其改为如下:

    Dim ReadBytes,TrunkBytes,TotalBytes

    ReadBytes = 0

    TrunkBytes = 52428800     '--分段大小为50M,某位大大经过测试,无组件上传限制单个文件最大约≤65MB

    TotalBytes = Request.TotalBytes

    If TrunkBytes > TotalBytes Then TrunkBytes = TotalBytes

    Set Forms = Server.CreateObject("Scripting.Dictionary")
    Forms.CompareMode = 1
    Set Files = Server.CreateObject("Scripting.Dictionary")
    Files.CompareMode = 1
    Set tStream = Server.CreateObject("ADODB.Stream")
    Set oUpFilestream = Server.CreateObject("ADODB.Stream")
    oUpFilestream.Type = 1
    oUpFilestream.Mode = 3
    oUpFilestream.Open

    Do While ReadBytes < TotalBytes
        oUpFilestream.Write Request.BinaryRead(TrunkBytes)

        ReadBytes = ReadBytes + TrunkBytes

        If (ReadBytes + TrunkBytes) > TotalBytes Then TrunkBytes = TotalBytes mod TrunkBytes  '最后剩下的字节

    Loop
    oUpFilestream.Position = 0
    RequestBinDate = oUpFilestream.Read
    iFormEnd = oUpFilestream.size

    修改后上传81M的文件成功(原来出错),但也有缺点,因为是二进制传输,文件大很占服务器内存。
  评论这张
 
阅读(208)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018