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 回复

是已经解决了吗?

更多关于uni-app createDownload ios 下载文件不完整的实战教程也可以访问 https://www.itying.com/category-93-b0.html


是,ios 在 start 之前设置一下请求头就可以了: downloader.setRequestHeader(‘Content-Type’,‘application/x-www-form-urlencoded; charset=UTF-8’); android 就不用设置,设置了也没问题。

根据你的描述,iOS端使用plus.downloader.createDownload通过POST方式下载文件不完整,这是一个已知的iOS平台特定问题。主要原因是iOS系统对下载请求的处理机制与Android不同。

问题分析:

  1. 请求头设置时机问题:iOS平台需要在调用start()方法之前设置请求头,否则可能导致请求参数或响应数据被截断。
  2. 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();

进一步优化建议:

  1. 检查服务器响应:确保服务器返回正确的Content-Length和Content-Type头部。
  2. 考虑使用GET请求:如果可能,将下载接口改为GET方式,避免POST方式在iOS上的兼容性问题。
  3. 添加超时设置
this.downloadObj.setTimeout(30000); // 设置30秒超时
回到顶部