如何使用Javascript将多个文件上载到服务器

如何使用Javascript将多个文件上载到服务器,javascript,cordova,Javascript,Cordova,我正在使用PhoneGap,上传一个文件(使用HTTP POST),就像这样 function uploadSingleFile() { var ft = new FileTransfer(); // set up parameters etc ft.upload(imageName, "http://serviceaddress/UploadFile.ashx", win, fail, options); } function win(r) { // succ

我正在使用PhoneGap,上传一个文件(使用HTTP POST),就像这样

function uploadSingleFile()
{
    var ft = new FileTransfer();
    // set up parameters etc
    ft.upload(imageName, "http://serviceaddress/UploadFile.ashx", win, fail, options);
}

function win(r)
{
    // success callback
}
我想上传多个文件,所以在成功回调中,我想调用uploadSingleFile以转到下一个文件

如何存储我正在使用的文件?我正在使用localStorage存储文件名。所以我想这样做

upload file localStorage.file0
upload file localStorage.file1
upload file localStorage.file2
所以我需要做的就是把数字存储在我们到达的地方的末尾,0,1等等。我需要使用全局变量吗?看起来很乱


如果我能将一个数字作为附加参数传递给成功回调,那该多好啊?

Hmmm。这个问题值得怀疑吗?只需存储一个文件名数组,并使用
JSON.stringify
/
JSON.parse
在数组和字符串之间进行转换。

首先将所有图像添加到数组:

var TemplstImg = [];

function UploadImages()
{

    var lstImages = [localStorage.file0,localStorage.file1,localStorage.file2];
    TemplstImg=lstImages  ;

    if (TemplstImg.length > 0) {
        var img = TemplstImg.pop();
        uploadPhoto(img);
    }
}

function uploadPhoto(imageURI) {

    imageURI = imageURI.ImageFile;

    var options = new FileUploadOptions();
    options.fileKey = "file";
    options.fileName = imageURI.substr(imageURI.lastIndexOf('/') + 1);
    options.mimeType = "image/jpeg";

    var params = {};
    params.value1 = "test";
    params.value2 = "param";

    options.params = params;

    var ft = new FileTransfer();

    ft.upload(imageURI, yourServerPath, winImg, failImg,options);
}

function winImg(r) {

    if (TemplstImg.length == 0) {
        alert ('Done , all files was uploaded'); 

    } else {
        var img = TemplstImg.pop();
        uploadPhoto(img);
    }
}

function failImg(error) {

    alert("failImg An error has occurred: Code = " + error.code);
    console.log("upload error source " + error.source);
    console.log("upload error target " + error.target);
}
函数上载SingleFile(文件名){
var ft=新文件传输();
ft.upload(“文件URL”,
“服务器”,
函数(结果、文件名){
log(文件名+'已成功上传到服务器');
},
函数(错误){
console.log(错误);
},
{fileName:fileName,fileKey:“file”});
}
函数uploadFiles(){
var files=JSON.parse(localStorage.files);
对于(var i=0;i

您可以将文件索引作为参数发送到uploadSingleFile(),然后在console.log()中使用它。

这并不是我真正关心的问题。这个调用是异步的,所以我必须确保一次只上传一个。如果我一直等到调用回调函数,直到启动下一个回调函数,那么我怎么知道我在使用哪个回调函数呢?可能是使用全局变量,或者生成一个包含此代码的类。也许我会试试。这不会一次上传多个文件,它会为每个文件发送一个帖子。
function uploadSingleFile(fileName) {

  var ft = new FileTransfer();

  ft.upload("fileUrl",
            "server",
            function (result , fileName) {
              console.log(fileName + ' has been uploaded successfully to server');                                          
            },
            function (error) {
              console.log(error);
            },
            {fileName: fileName, fileKey: "file"});
}

function uploadFiles() {
  var files = JSON.parse(localStorage.files);

  for(var i=0; i < files.length; i++) {
    uploadSingleFile(files[i]);
  }
}