You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 4.0环境下WebClient下载OneDrive文件不完整问题求助

问题解决:WebClient下载OneDrive文件不完整

问题分析

核心问题有两点:一是代码中URL存在语法错误,二是OneDrive的下载链接需要模拟浏览器请求头才能返回完整文件资源,WebClient默认请求会被返回跳转页面或截断内容,而非真实文件。

解决步骤

  1. 修正URL语法错误
    原代码中durl末尾多了一个多余的双引号,导致请求地址无效,直接引发下载异常或错误内容。
  2. 添加浏览器模拟请求头
    OneDrive会校验User-Agent、Accept等请求头信息,只有匹配浏览器请求特征,才会返回真实文件下载地址,需添加贴近现代浏览器的请求头。
  3. 确保重定向处理(可选但稳妥)
    显式设置AllowAutoRedirect = True,避免环境差异导致的重定向失败(WebClient默认已开启,但显式声明更可靠)。
  4. 异步下载需监听完成事件
    使用DownloadFileAsync时,若程序未等待下载完成就退出,会导致文件不完整,必须监听DownloadFileCompleted事件确认下载状态。

修改后的代码

同步下载版本(更稳妥,适合多数场景)

Sub DownloadFile()
    Dim wc As New WebClient()
    Try
        ' 修正URL,移除末尾多余的双引号
        Dim durl As String = "https://onedrive.live.com/download?cid=9B804CF9A004FFF3&resid=9B804CF9A004FFF3%212166&authkey=ABv40n0yI5bLOAo"
        
        ' 模拟Chrome浏览器请求头
        wc.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")
        wc.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8")
        wc.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3")
        wc.AllowAutoRedirect = True ' 显式允许重定向
        
        ' 同步下载,确保文件完整
        wc.DownloadFile(durl, Application.StartupPath & "\Temp.rar")
    Catch ex As Exception
        SendToLogFile("Download  " & ex.Message)
    Finally
        ' 释放资源
        wc.Dispose()
    End Try
End Sub

异步下载版本(需监听完成事件)

Sub DownloadFileAsync()
    Dim wc As New WebClient()
    AddHandler wc.DownloadFileCompleted, AddressOf DownloadCompletedHandler
    Try
        Dim durl As String = "https://onedrive.live.com/download?cid=9B804CF9A004FFF3&resid=9B804CF9A004FFF3%212166&authkey=ABv40n0yI5bLOAo"
        
        wc.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36")
        wc.Headers.Add("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8")
        wc.Headers.Add("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3")
        wc.AllowAutoRedirect = True
        
        wc.DownloadFileAsync(New Uri(durl), "test.rar")
    Catch ex As Exception
        SendToLogFile("Download  " & ex.Message)
        wc.Dispose()
    End Try
End Sub

Private Sub DownloadCompletedHandler(sender As Object, e As System.ComponentModel.AsyncCompletedEventArgs)
    Dim wc As WebClient = DirectCast(sender, WebClient)
    Try
        If e.Error IsNot Nothing Then
            SendToLogFile("Download failed: " & e.Error.Message)
        ElseIf e.Cancelled Then
            SendToLogFile("Download cancelled")
        Else
            SendToLogFile("Download completed successfully")
        End If
    Finally
        wc.Dispose()
    End Try
End Sub

兼容性说明

以上代码基于.NET Framework 4.0开发,兼容所有支持.NET Framework 4.0的Windows系统(Windows XP SP3及以上版本),只要系统安装了.NET Framework 4.0运行环境即可正常运行。

内容的提问来源于stack exchange,提问作者user15724951

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 14:50:22