在一个HTTP请求中上载多个文件

时间:2015-09-19 10:08:36

标签: cordova phonegap-plugins cordova-plugins ngcordova

有没有办法使用cordova在一个HTTP请求中上传多个文件。我发现所有解决方案都为每个图像上传使用单独的HTTP调用。

2 个答案:

答案 0 :(得分:1)

我问Raymond camden同样的问题。他用这个很棒的博客回复了我。

我只是使用相机插件让您从设备中选择多个图像。每个图像都添加到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

资源:Raymond Camden's Blog

答案 1 :(得分:0)

从我这边,我试图将所有图像/文件压缩到一个文件中,然后上传单个zip文件。 这个潜在的解决方案的问题:找到android和amp;的cordova zip功能IOS