快速业务通道

ASP.NET中大文件下载的跟踪和恢复

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-05-20
geRequest设置为True.如果请求了范围,CheckIfRange方法会验证IfRange头信息。

如果被请求的范围是有效的,代码会计算响应信息的大小。如果客户端请求了多个范围,响应信息大小的数值会包含多部分头部信息长度的数值。

如果不能确定某个发送的头部信息值,程序将把这个下载请求作为最初请求而不是部分下载来处理,从文件的顶部开始发送一个新的下载流。

If bIsRangeRequest AndAlso CheckIfRange(objRequest, objFile) Then
  '' 这是范围请求
  '' 如果Range数组包含多个实体,它还是一个多部分范围请求
  bMultipart = CBool(alRequestedRangesBegin.GetUpperBound(0)>0)
  '' 进入每个范围来获取整个响应长度
  For iLoop = alRequestedRangesBegin.GetLowerBound(0) To alRequestedRangesBegin.GetUpperBound(0)
   '' 内容的长度(这个范围的)
   iResponseContentLength += Convert.ToInt32(alRequestedRangesend( _
iLoop) - alRequestedRangesBegin(iLoop)) + 1
   If bMultipart Then
    '' 如果是多部分范围请求,计算出将发送的中间头信息的长度
    iResponseContentLength += MULTIPART_BOUNDARY.Length
    iResponseContentLength += objFile.ContentType.Length
    iResponseContentLength += alRequestedRangesBegin(iLoop).ToString.Length
    iResponseContentLength += alRequestedRangesend(iLoop).ToString.Length
    iResponseContentLength += objFile.Length.ToString.Length
    '' 49是多部分下载中换行和其它必要的字符的长度
    iResponseContentLength += 49
   End If
  Next iLoop

  If bMultipart Then
   '' 如果是多部分范围请求,
   '' 我们还必须计算出将发送的最后一个中间头信息的长度
   iResponseContentLength +=MULTIPART_BOUNDARY.Length
   '' 8 是破折号和换行符的长度
   iResponseContentLength += 8
  Else
   '' 不是多部分下载,因此我们必须说明初始HTTP头信息的响应范围
   objResponse.AppendHeader( HTTP_HEADER_CONTENT_RANGE, "bytes " & _
   alRequestedRangesBegin(0).ToString & "-" & _
   alRequestedRangesend(0).ToString & "/" & _
   objFile.Length.ToString)
   ''End If
   '' 范围响应
   objResponse.StatusCode = 206 '' 局部响应
  Else
   '' 这不是范围请求,或者被请求的范围实体ID与当前的实体ID不匹配,
   '' 因此开始新的下载
   '' 指明文件完成部分的大小等于内容的长度
   iResponseContentLength =Convert.ToInt32(objFile.Length)
   '' 返回正常的OK状态
   objResponse.StatusCode = 200
  End If
  '' 接下来服务器必须发送几个重要的响应头信息,例如内容长度、Etag、和文件的内容类型:
  '' 把内容长度写入响应
  objResponse.AppendHeader( HTTP_HEADER_CONTENT_LENGTH,iResponseContentLength.ToString)
  '' 把最后修改日期写入响应
  objResponse.AppendHeader( HTTP_HEADER_LAST_MODIFIED,objFile.LastWriteTimeUTC.ToString("r"))
  '' 告诉客户端软件我们接受了范围请求
  objResponse.AppendHeader( HTTP_HEADER_ACCEPT_RANGES,HTTP_HEADER_ACCEPT_RANGES_BYTES)
  '' 把文件的实体标签写入响应(用引号括起来)
  objResponse.AppendHeader(HTTP_HEADER_ENTITY_TAG, """" & objFile.EntityTag & """")
  '' 把内容类型写入响应
  If bMultipart Then
   '' 多部分消息有这种特殊的类型
   '

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号