Autodesk Forge分块下载properties.db后SQLite无法打开问题求助
下载后SQLite文件损坏排查方向
- 编码使用错误:你当前追加文件用的
$data | Out-File -Encoding Ascii -Append "C:\Temp\sample.db" -NoNewline命令存在严重问题,SQLite的.db文件是二进制格式,Ascii编码会自动替换所有字节值大于127的字符为乱码或占位符,直接破坏二进制文件结构。你需要改用二进制写入模式,PowerShell下可以直接将获取到的字节流写入文件,不要走字符编码转换的逻辑,比如调用[System.IO.File]::WriteAllBytes()或者分块追加时用文件流的二进制写入方式。 - HTTP Range区间设置错误:HTTP Range请求的字节区间是左闭右闭规则,如果你设置的单块大小为100MB(对应10010241024=104857600字节),正确的区间应该是
0-104857599、104857600-209715199依次类推,你现在用的0-100、101-200这种数值如果是按MB换算的,会出现区间重叠或者缺失1字节的问题,最终导致文件大小和原始文件不一致,结构损坏。 - 文件大小校验异常:下载完成后请对比HEAD请求返回的
Content-Length响应头数值,和本地最终生成的.db文件大小是否完全相等,只要相差1字节都会导致SQLite无法识别。 - 分块请求响应校验缺失:请检查每一次分块请求的响应状态码是否为
206 Partial Content,如果某一次请求因为header设置错误返回了200状态码,响应体就是完整的2GB文件,直接追加会导致后续内容全部错误。 - 原始字节流获取错误:如果你是用PowerShell的Invoke-WebRequest/Invoke-RestMethod获取分块内容,默认会将响应体按字符串编码处理,不会保留原始二进制字节,需要添加参数指定获取原始字节流,或者直接将每一块的输出定向到文件流,避免中间的字符编码转换。
内容的提问来源于stack exchange,提问作者Tom Denby
相关产品推荐
相关产品推荐

