2017-08-01 13 views
0

画像ファイルのリストを一度にサーバに渡したいと思います。jquery then srcをフェッチしてサーバに画像をアップロード

var formData = new FormData(); 

// Iterate all td's in second column 
$("#table-image tbody tr:not(:first-child)").each(function (index, value) { 
    var blob = value.cells[4].innerText; 
    var fileName = (index + 1) + ".jpg"; 
    srcToFile(blob, fileName, "image/jpeg") 
    .then(function (file) { 
     formData.append("file", file); 
     alert(formData.getAll("file").length); ** // I know that I can use aJax jquery to pass one by one at here** 
    }, function (error) { 
     // 
    }); 
}); 

function srcToFile(src, fileName, mimeType) { 
    return (fetch(src) 
     .then(function (res) { return res.arrayBuffer(); }) 
     .then(function (buf) { return new File([buf], fileName, { type: mimeType }); }) 
    ); 
} 

この場合、formDataはどのように使用できますか?

ありがとうございました!

+0

「srcToFile()」とは何ですか? – Barmar

+0

@Barmar私の投稿を更新しました。この関数は画像として新しいファイルを作成するためのものです。 –

+0

開発ツールからhttpリクエストを確認しましたか?あなたの要求に含まれているイメージファイルですか? – Jesse

答えて

1

srcToFileによって返されたすべての約束事を配列に入れてから、$.when()を使用してすべてを待ちます。

var promises = $("#table-image tbody tr:not(:first-child)").map(function (index, value) { 
    var blob = value.cells[4].innerText; 
    var fileName = (index + 1) + ".jpg"; 
    return srcToFile(blob, fileName, "image/jpeg") 
    .then(function (file) { 
     formData.append("file[]", file); 
    }, function (error) { 
     // 
    }); 
}).get(); 
$.when(promises).then(function() { 
    alert(formData.getAll("file[]").length); 
    return $.ajax({ 
     url: "yourURL", 
     type: "post", 
     processData: false, 
     data: formData 
    }); 
}).then(...) 
+0

ありがとう@Barmar! 私は試しました、それは長さ= 0.を示していますか? alertの後にformData.appendがデバッグされて見えました。 –

関連する問題