永发信息网

VB通过API函数如何实现HTTP断点续传下载?

答案:2  悬赏:0  手机版
解决时间 2021-12-25 20:52
  • 提问者网友:感性作祟
  • 2021-12-25 17:21
这是我使用的下载函数,如何添加断点续传功能?还有如何获得远程文件大小?
Public Function DownloadFile(ByVal surl As String, ByVal strFile As String) As Long
Dim s As String
Dim hOpen As Long
Dim hOpenUrl As Long
Dim bDoLoop As Boolean
Dim bRet As Boolean
Dim intFH As Integer

Dim sReadBuffer() As Byte
Dim lNumberOfBytesRead As Long

Const INTERNET_OPEN_TYPE_PRECONFIG = 0
Const INTERNET_OPEN_TYPE_DIRECT = 1
Const INTERNET_OPEN_TYPE_PROXY = 3
Const scUserAgent = "VB OpenUrl"
Const INTERNET_FLAG_RELOAD = &H80000000
frmDownLoad.lblCount.Caption = "正在连接服务器..."
frmDownLoad.lblCount.Refresh
hOpen = InternetOpen(scUserAgent, INTERNET_OPEN_TYPE_PRECONFIG, vbNullString, vbNullString, 0)
hOpenUrl = InternetOpenUrl(hOpen, surl, vbNullString, 0, INTERNET_FLAG_RELOAD, 0)
lCount = 0

If hOpen <> 0 And hOpenUrl <> 0 Then
intFH = FreeFile
If Dir(strFile) <> "" Then
VBA.FileSystem.Kill strFile
End If
Open strFile For Binary As #intFH
myCount.Clear
Do While True
ReDim sReadBuffer(2048)
bRet = InternetReadFile(hOpenUrl, sReadBuffer(0), 2048, lNumberOfBytesRead)
If lNumberOfBytesRead > 0 And bRet = True Then
ReDim Preserve sReadBuffer(0 To lNumberOfBytesRead - 1)
Put #intFH, , sReadBuffer
lCount = lCount + lNumberOfBytesRead
myCount.Count lNumberOfBytesRead
Else
Exit Do
End If
bolStop = False
DoEvents
If bolStop = True Then
Exit Do
End If
Loop
Close #intFH
frmDownLoad.lblCount.Caption = "共下载 " & lCount & " 字节"
Else
frmDownLoad.lblCount.Caption = "打开URL错误"
End If

If hOpenUrl <> 0 Then InternetCloseHandle (hOpenUrl)
If hOpen <> 0 Then InternetCloseHandle (hOpen)
Set myCount = Nothing
DownloadFile = lCount
End Function
最佳答案
  • 五星知识达人网友:掌灯师
  • 2021-12-25 18:06
获得 http 标头信息,就可以得到文件的大小
发送标头信息 可以设置 断点续传的 起点

具体的 我忘了 很久以前 弄过! 下载 小于2G的文件 速度 很快,不过超过 2G的文件 vb 处理起来需要 字节转换,很麻烦切很容易内存崩溃!

断点续传 最好使用 Winsock 控件 或者直接使用 Winsock 模块(个人感觉使用 模块要好一些,比较稳定)

举个例子:

发送请求下载信息

strTmp="GET 文件网络地址 HTTP/1.1" 回车
StrTmp=strTmp + "Accept: */*" 回车
StrTmp=StrTmp + "Host:主机地址"回测
StrTmp=StrTmp +"Range bytes=续传的起始点-" 回车 如果不加这句话 服务器回返回文件大小

简单的就是这样 不过 这是我印象中的,不过这个定义比较严格 你可以去网上在搜搜!
全部回答
  • 1楼网友:荒野風
  • 2021-12-25 18:29
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯