2011-08-21 24 views
4

は私がHTML5 AJAX複数のファイルのアップロード

/* If you want to upload only a file along with arbitary data that 
     is not in the form, use this */ 
    var fd = new FormData(); 
    fd.append("file", document.getElementById('file').files[0]); 

    /* If you want to simply post the entire form, use this */ 
    //var fd = document.getElementById('form1').getFormData(); 

    var xhr = new XMLHttpRequest();   
    xhr.upload.addEventListener("progress", uploadProgress, false); 
    xhr.addEventListener("load", uploadComplete, false); 
    xhr.addEventListener("error", uploadFailed, false); 
    xhr.addEventListener("abort", uploadCanceled, false); 
    xhr.open("POST", "Upload.php"); 
    xhr.send(fd); 

、(jqueryの$.postが何らかの理由でHTML5で動作しないようです)このプレーンJSのAJAXアップロードコードに出くわした。しかし、私はここでは二つの問題、

を持っています
  1. オブジェクトの後ろのこの行はどういう意味ですかFormData

fd.append("file", document.getElementById('file').files[0]);

は、なぜ私はそこにIDが必要なのでしょうか? jquery append()$('input[type=file]')を使用して何かできますか?

  1. このajaxは1つのファイルのアップロード用ですが、複数のファイルをアップロードするためにどのように変更できますか?

答えて

9

この行はオブジェクトFormDataの後に何を意味しますか?

fd.append("file", document.getElementById('file').files[0]); 

document.getElementById('file')は、そのIDによって<input type="file" id="file">要素を取得します。 element.files[0]は、要素から最初に選択されたファイルを取得します。 fd.append("file", file)は、フィールド名がfileFormDataインスタンスに追加します。 fdは、後でmultipart/form-data XHRリクエスト本体として送信されます。


は、なぜ私はそこにIDが必要なのでしょうか? jquery append()$('input[type=file]')を使用して何かできますか?

IDは必要ありません。ドキュメントのIDで<input type="file">を取得できるようにするには、すべての例の後です。この例のappend()関数はthe FormData APIの一部であり、jQueryのappend()関数と混同しないでください。 append()の1番目の引数はIDではなくフィールド名を表します。彼らが同じであることはちょうど偶然のことです。


このAjaxは、単一のファイルアップロード用で、どのように私は複数のファイルをアップロードするためにそれを変更することができますか?

FormDataに複数のフィールドを追加するだけです。答えてくれてありがとうは

+0

など、それはフィールド名file0することにより、サーバ側で利用可能になるでしょう

for (var i = 0; i < files.length; i++) { fd.append("file" + i, files[i]); } 

file1:あなたはFile[]を持っていると仮定すると、ここでは一例です!私はこれについて尋ねることができます - 'files.length''ファイルはどこから来ますか?この 'for()'の前に何を設定すべきですか? 'files.length'を行うことができますか?ありがとう! – laukok

+0

あなたの 'for()'の答えを使用すると 'ファイルが定義されていません 'というエラーが表示されます... – laukok

+0

ええと、ユーザーが複数のファイルを指定した場所から取得するだけですか? – BalusC

関連する問題