3

XMLHttpRequestレベル2を使用してファイルをアップロードしたい。私はjQueryを使用しているので、jQueryを優先して使用したいと思います。

だから私は次のコードを書きました(coffescriptですが、javascriptに精通している人なら誰でも簡単に読めるはずです)

fileToUpload = event.currentTarget.files[0]

data = new FormData()
data.append("uploadedfile", fileToUpload) 

$.ajax({
    type: 'POST',
    url: url,
    data: data,
    contentType: false,
    processData: false,
    mimeType: 'multipart/form-data',
})

そのコードを使用して、PHPのサーバー側で`を実行します

Firefox 17.0.1では、何も得られません。$ _FILESはnullです。Chromium22.0では、アップロードされたファイルを取得します(奇妙な形式ですが、少なくとも何か)

Array
(
    [uploadedfile] => Array
        (
            [name] => filename.txt
            [type] => application/octet-stream
            [tmp_name] => /tmp/phpWwenhc
            [error] => 0
            [size] => 189
        )

)

Firefoxのバグかどうか誰か知っていますか?回避策はありますか?私は何か間違ったことをしていますか?私は同様の問題を検索しましたが、私が見つけたすべての提案された回答は私にはうまくいきませんでした(Firefox用ではなかった、xhrレベル2を使用していなかったなど)

前もって感謝します。

お願い: IE以前のバージョンは気にしません。iframeソリューションもプラグインもありません。XmlHttpRequestレベル2だけです。聞いたことがない人は、 https ://developer.mozilla.org/en-US/docs/DOM/XMLHttpRequest/FormData/Using_FormData_Objectsをご覧ください。

4

3 に答える 3

2

Remove the mimeType parameter, the browser will generate the correct mime type with the required boundry.

于 2013-01-01T22:24:06.380 に答える
0

私はちょうどそれを作りました。AJAXを介してファイルをアップロードする方法は実際にはありません。.phpファイルを直接参照する方がよいでしょう。

于 2013-01-01T19:11:51.877 に答える
0

FirefoxとPHPに理解させるには、ファイルを配列として扱う必要がある場合があります。アップロードフィールドの名前を変更してみてください。

data.append("uploadedfiles[]", fileToUpload);
于 2013-01-01T23:12:23.650 に答える