PowerShell调用Invoke-WebRequest下载文件损坏问题咨询
故障原因
文件损坏的核心原因是你传入的URL并非目标文件的直链地址:
你使用的https://easyupload.io/wbpkvq是easyupload的文件分享展示页,不是mp3文件的直接下载链接。执行Invoke-WebRequest请求该地址时,实际获取到的是带下载按钮、广告内容的HTML网页源码,把网页内容直接保存为.mp3后缀的文件,自然无法正常播放,表现为文件损坏。
只要你传入的是这类中转分享页链接,而非直接返回文件流的直链,无论换多少个分享URL都会出现同样问题,和后续文件移动操作无关。
另外在PowerShell 5.1及更早版本中,Invoke-WebRequest默认会调用IE内核解析返回的HTML内容,大文件下载场景下也可能因为解析逻辑异常导致写入的文件不完整,加重损坏问题。
修复方法
- 先获取目标文件的真实直链:打开文件分享页,通过浏览器开发者工具抓包,找到直接返回文件流的下载请求地址——这类地址直接在浏览器地址栏访问会直接触发文件下载,不会跳转到带其他内容的网页。以easyupload为例,真实直链一般包含
/download/路径段。 - 替换脚本中的URL为真实直链,同时添加兼容参数避免旧版PowerShell的异常问题,参考脚本如下:
# 替换为获取到的真实文件直链 $url = "真实文件直链地址" $dest = "D:\Temp\trololol.mp3" # 强制使用TLS1.2协议,避免HTTPS握手兼容问题 [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 # 添加-UseBasicParsing参数跳过HTML DOM解析,提高大文件下载稳定性 Invoke-WebRequest -Uri $url -OutFile $dest -UseBasicParsing
- 下载完成后可以做简单校验:对比下载文件的大小和分享页标注的源文件大小,如果大小差距明显,或者用记事本打开文件头部看到
<!DOCTYPE html>字样,说明仍然下载到了网页内容,需要重新确认直链是否正确。
内容的提问来源于stack exchange,提问作者Diggitzz
相关产品推荐
相关产品推荐

