ASP 에서 Adodb.stream 을 통 해 다 중 스 레 드 로 큰 파일 을 다운로드 합 니 다.

어떤 친구 가 음악 교환 소 를 만 드 는(그들 업계 의 아 이 디 망)은 비용 을 지불 하고 다운로드 해 야 한다.도 난 방지 체인 을 시 도 했 습 니 다.이상 적 이지 않 았 습 니 다.결국 Adodb.stream 을 사용 하여 읽 고 직접 출력 했 습 니 다.
해적판 문 제 를 해 결 했 지만 새로운 문제 가 또 생 겼 다.Adodb.stream 같은 방식 의 컴퓨터 는 말 하기 도 쉽 지만 대부분의 컴퓨터 브 라 우 저 는 지원 합 니 다.모 바 일 브 라 우 저의 많은 브 라 우 저 들 이 읽 기 를 가속 화하 기 위해 다 중 스 레 드 다운로드 로 인해 파일 을 제대로 읽 을 수 없습니다.
클러치,HTTP 헤드 추가 발견 HTTPRANGE。전에 왕 대(왕 홍 영)의 에서 ASP 다 중 스 레 드 다운로드 문 제 를 언급 한 것 을 어렴풋이 기억 하고 집 으로 돌아 가 뒤 져 보 니 결국 해결 되 었 다.
호출 을 편리 하 게 하기 위해 서 직접 함수 로 썼 다.왕 대 코드 없 이 내 가 더 예 쁜 것 같 아.필요 한 친구 가 필요 하면 직접 가 져 가면 됩 니 다.코드 는 다음 과 같 습 니 다.

option explicit
 
'inputFile        
'outputName      ,    ,        inputFile   
Sub CreateDownloader(byval inputFile, byval outputName)
  Dim filePath
  filePath = Server.Mappath(inputFile)
  If outputName = "" Then outputName = Split(filePath, "\")(UBound(Split(filePath, "\")))
 
  '    
  Dim AdoStream, bufferSize
  Set AdoStream = Server.CreateObject("Adodb.Stream") 'Adodb.Stream,              
  bufferSize   = 2 * 1024 * 1024 '      (byte) 2M
  AdoStream.Mode = 3 '1  ,2  ,3   
  AdoStream.Type = 1 '1    ,2   
  AdoStream.Open
  AdoStream.LoadFromFile(filePath) '    
  Response.AddHeader "Content-Disposition", "attachment; filename=" & outputName '   
  Response.ContentType = "application/octet-stream" '            (     ,   ,       
 
  Dim httpRange,rangeStart,fileSize
  '          
  httpRange = Request.ServerVariables("HTTP_RANGE")
  fileSize = AdoStream.size '     
 
  If httpRange = "" Then
    '       
    rangeStart = 0
  Else
    '      
    httpRange = Mid(httpRange, 7)
    rangeStart = CLng(Split(httpRange, "-")(0))
 
    If rangeStart < 0 Or rangeStart >= fileSize Then
      '      
      Response.Status = "416 Requested range not satisfiable"
    Else
      Response.Status = "206 Partial Content"
      Response.AddHeader "Content-Range", "bytes " & rangeStart & "-" & (fileSize - 1) & "/" & fileSize
      AdoStream.Position = rangeStart
    End If
 
  End If
 
  Dim binaryBlock
 
  If Response.Status <> "416 Requested range not satisfiable" Then
    Response.AddHeader "Content-Length", fileSize - rangeStart '            
    binaryBlock = AdoStream.Read(bufferSize)
 
    Do While Lenb(binaryBlock) > 0 '          
      Response.BinaryWrite binaryBlock '        
      Response.Flush '    (    256  ),             。
      binaryBlock = AdoStream.Read(bufferSize)
    Loop
 
  End If
 
  AdoStream.Close '      
  Set AdoStream = Nothing
  Response.End
End Sub
사용 도 매우 간단 합 니 다.위의 코드 가 다운 로 더 asp 에 저장 되 어 있다 면 직접 참조 하면 됩 니 다.

<!--#include file="downloader.asp"-->
<%
  '    
  call CreateDownloader("down/tools.rar", "")
   
  '           
  call CreateDownloader("down/tools.rar", "hello.rar")
%>
그림 도 있 고 진실 도 있다.

ASP 에서 Adodb.stream 을 통 해 다 중 스 레 드 로 큰 파일 을 다운로드 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 ASP 다 중 스 레 드 로 큰 파일 을 다운로드 하 는 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 지원 바 랍 니 다!

좋은 웹페이지 즐겨찾기