有没有办法使用cordova在一个HTTP请求中上传多个文件。我发现所有解决方案都为每个图像上传使用单独的HTTP调用。
答案 0 :(得分:1)
我只是使用相机插件让您从设备中选择多个图像。每个图像都添加到DOM中。这是代码:
Bundle messagereceiver = getIntent().getExtras();
String fromactivity1 = messagereciever.getString("message1");
displaytext.setText(fromactivity1);
//Second Activity
Bundle messagereceiver2 = getIntent().getExtras();
String fromactivity2 = messagereceiver2.getString("message2");
displaytext2.setText(fromactivity2);
你可以猜到,底部的上传按钮会开始这个过程。对于我的测试,我设置了一个ColdFusion脚本,只是将上传保存到临时目录。但是要添加一点randonmness,它会通过输出0来随机拒绝图像。成功上传后,它将输出1.
以下是代码的其余部分:
var images = [];
var $imagesDiv;
document.addEventListener("deviceready", init, false);
function init() {
$("#addPicture").on("touchend", selPic);
$imagesDiv = $("#images");
$("#uploadPictures").on("touchend", uploadPics);
}
function selPic() {
navigator.camera.getPicture(function(f) {
var newHtml = "<img src='"+f+"'>";
$imagesDiv.append(newHtml);
images.push(f);
if(images.length === 1) {
$("#uploadPictures").removeAttr("disabled");
}
}, function(e) {
alert("Error, check console.");
console.dir(e);
}, {
quality: 50,
sourceType: Camera.PictureSourceType.PHOTOLIBRARY,
destinationType: Camera.DestinationType.FILE_URI
});
}
所以从上到下,我正在做的是创建一个promise对象数组。或者更具体地说,它们的jQuery版本。然后,我为用户选择的每个图像运行上传调用。我检查服务器的结果,并根据服务器的说法用0或1解析promise。
最后,我打电话给$ .when等待所有这些异步流程完成。我实际上没有显示任何内容,我只是console.dir,但你可以想象检查结果并做 - 好 - 无论什么都有意义。
我希望这对大家有用,并且一如既往,如果您有任何疑问,请告诉我。您可以在此处找到完整的来源:https://github.com/cfjedimaster/Cordova-Examples/tree/master/multiupload
答案 1 :(得分:0)
从我这边,我试图将所有图像/文件压缩到一个文件中,然后上传单个zip文件。 这个潜在的解决方案的问题:找到android和amp;的cordova zip功能IOS