A.NET 中大文件下载的跟踪和恢复(4)_.NET概论及软件使用_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

A.NET 中大文件下载的跟踪和恢复(4)

作者:黑客防线网安ASP维护基地 来源:黑客防线网安ASP维护基地 浏览次数:0

本篇关键词:恢复跟踪中大'
黑客防线网安网讯:   这些初步检查的函数中的ParseRequestHeaderRange(见下载代码)检查客户端是否请求了文件范围(这意味着是一个局部下载)。如果被请求的范围是无效的(无效范围指超越文件大小或包含不...

   这些初步检查的函数中的ParseRequestHeaderRange(见下载代码)检查客户端是否请求了文件范围(这意味着是一个局部下载)如果被请求的范围是无效的(无效范围指超越文件大小或包含不合理数字的范围数值)该方法把bIsRangeRequest设置为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
  ' 多部分消息有这种特殊的类型
  ' 在例子中文件实际的mime类型在以后才写入响应
  objResponse.ContentType = MULTIPART_CONTENTTYPE
 Else
  ' 单个部分消息拥有的文件内容类型
  objResponse.ContentType = objFile.ContentType
End If

 

    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-14404-1.html
网站维护教程更新时间:2012-03-30 05:48:31  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer