详细问题描述
[内容]
目前需求是需要手机上直接从应用服务器通过.do的形式下载合同文件,手机需要上送业务参数信息,于是使用了plus.downloader的post请求方式,data参数项中上送业务数据。但是IOS下载的时候,应用服务器后台无法接收到数据,通过wireshark抓包发现data上送的数据都为空.
安卓正常
重现步骤
[步骤]
[结果]
[期望]
运行环境
[系统版本] IOS
[浏览器版本]
[IDE版本] HB
[mui版本] 3.6.0
附件
[代码片段]
function getFileFromNetwork(localpath){
var options = {
method: "POST",//POST时data数据有效
filename :path,
priority:10,//下载优先级
timeout:15,//服务器响应超时时间
retry : 1,//重试次数
retryInterval : 5,//重试间隔时间
data:uploadData
};
// downloader = plus.downloader.createDownload(remoteUrl,options,function(task,status){});//这种方法无法监听中间状态
downloader = plus.downloader.createDownload(remoteUrl,options);
var waiting =null;
waiting = plus.nativeUI.showWaiting("下载中...");
var startTime = +new Date().getTime();
downloader.addEventListener('statechanged',function(task,status){
switch(task.state) {
case 0:
console.log("=======***********=========")
break;
case 1: // 开始下载
console.log("=======开始下载=========")
break;
case 2: // 已连接到服务器
console.log("=======已连接到服务器=========")
break;
case 3: // 已接收到数据
console.log("=======已接收到数据=========")
processFunc && processFunc(task.downloadedSize,task.totalSize);
break;
case 4: // 下载完成
waiting.close();
if(status == 200){
console.log("下载成功=" + task.filename);
var absolutePath = plus.io.convertLocalFileSystemURL(task.filename);
successFunc && successFunc(absolutePath,task.filename);
//删除临时文件
if (task.filename){
//exports.delFile(task.filename);
}
}else{
console.log("下载失败=" + status+"=="+localpath);
var ec = task.getResponseHeader("ec")||'';
var em = task.getResponseHeader("em")||'';
errorFunc && errorFunc(ec,em);
//dtask.abort();//文档描述:取消下载,删除临时文件;(但经测试临时文件没有删除,故使用delFile()方法删除);
if (!localpath){
//exports.delFile(localpath);
}
}
var endTime = +new Date().getTime();
console.log("下次耗时(s):"+(endTime - startTime)/1000);
waiting.close();
break;
}
})
downloader.start();
}
[安装包]
联系方式
[QQ]
[电话] 18607127502
2 个回复
小明子 (作者)
已解决,需要后台指定接收类型。POST的方式才支持data数据上送,否则只能url后面拼接参数
维多利亚胡 - 小白
你的这个问题解决了吗,我也遇到这个问题了,安卓没有问题,ios有问题