uni-app createDownload ios 下载文件不完整
uni-app createDownload ios 下载文件不完整
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| HBuilderX | 3.3.0 |
示例代码:
this.downloadObj = plus.downloader.createDownload(win.apiUrl + 'api/webApi/DownloadFile/', {
method: 'POST',
data: opts.dataPath + ',' + settings.userid + ',' + settings.token + ',JuChatPhone,1.0.0.1',
filename: this.getSavePath(opts.dataPath, opts.fileName)
}, function(d, status) {
// 下载完成
if (status == 200) {
// console.log("Download success: " + d.filename);
opts.succee(d)
} else {
// console.log("Download failed: " + status);
opts.failed(status)
}
});
this.downloadObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');// 设置POST请求提交的数据类型为JSON字符串
this.downloadObj.start()
### 操作步骤:
```javascript
this.downloadObj = plus.downloader.createDownload(win.apiUrl + 'api/webApi/DownloadFile/', {
method: 'POST',
data: opts.dataPath + ',' + settings.userid + ',' + settings.token + ',JuChatPhone,1.0.0.1',
filename: this.getSavePath(opts.dataPath, opts.fileName)
}, function(d, status) {
// 下载完成
if (status == 200) {
// console.log("Download success: " + d.filename);
opts.succee(d)
} else {
// console.log("Download failed: " + status);
opts.failed(status)
}
});
this.downloadObj.start()
### 预期结果:
下载成功,打开文件成功
实际结果:
ios 打开文件后出现“分享”,经查所下载的文件为 74b (问题容量)
### bug描述:
ios 用 plus.downloader.createDownload post 方式 下载文件成功,但不完整,mp3 不能播放,doc 等不能打开..,adnroid 机没问题。
后端是 c# webapi。
经查,还要在 createDownload 下 start 之前设置请求头才行....
更多关于uni-app createDownload ios 下载文件不完整的实战教程也可以访问 https://www.itying.com/category-93-b0.html
3 回复
是,ios 在 start 之前设置一下请求头就可以了: downloader.setRequestHeader(‘Content-Type’,‘application/x-www-form-urlencoded; charset=UTF-8’); android 就不用设置,设置了也没问题。
根据你的描述,iOS端使用plus.downloader.createDownload通过POST方式下载文件不完整,这是一个已知的iOS平台特定问题。主要原因是iOS系统对下载请求的处理机制与Android不同。
问题分析:
- 请求头设置时机问题:iOS平台需要在调用
start()方法之前设置请求头,否则可能导致请求参数或响应数据被截断。 - POST数据格式:你当前使用的是
application/x-www-form-urlencoded格式,但实际传递的是逗号分隔的字符串,这可能导致服务器解析异常。
解决方案:
修改你的代码,确保在调用start()之前设置请求头:
this.downloadObj = plus.downloader.createDownload(win.apiUrl + 'api/webApi/DownloadFile/', {
method: 'POST',
data: opts.dataPath + ',' + settings.userid + ',' + settings.token + ',JuChatPhone,1.0.0.1',
filename: this.getSavePath(opts.dataPath, opts.fileName)
}, function(d, status) {
if (status == 200) {
opts.succee(d)
} else {
opts.failed(status)
}
});
// 关键:在start()之前设置请求头
this.downloadObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
this.downloadObj.start();
进一步优化建议:
- 检查服务器响应:确保服务器返回正确的Content-Length和Content-Type头部。
- 考虑使用GET请求:如果可能,将下载接口改为GET方式,避免POST方式在iOS上的兼容性问题。
- 添加超时设置:
this.downloadObj.setTimeout(30000); // 设置30秒超时


