10

HTML5についてサポートが必要です。アップロードされたすべてのファイルをループして、各ファイルの詳細を取得するスクリプトがあります。現在、FileReaderを含むHTML5テクニックを使用しています。FileReader関数はChromeとFirefoxでのみ機能するので、他のすべてのブラウザーで機能する代替手段を探しています。

スタックオーバーフローの質問をFileReaderHTML5 APIのFlashの代替案として見ましたが、このFlashの使用方法を理解できず、アップロードされたすべてのファイルをループしてそれぞれを取得できる他の解決策がありません。ファイルの詳細(SafariとInternet Explorerで機能します)?

4

2 に答える 2

4

最終的に FileReader をまったく使用せず、代わりに event.files をループして files[i] ごとに各ファイルを取得し、XHR によって FormData オブジェクトを使用して AJAX 要求を送信しました (取得する必要がないと判断したため、うまくいきました)。ファイルデータ):

var xhrPool = {};
var dt = e.dataTransfer;
var files = (e.files || dt.files);
for (var i = 0; i < files.length; i++) {
    var file = files[i];
    // more code...

    xhrPool[i] = getXMLHttpRequest();
    xhrPool[i].upload.onprogress = uploadProgress;
    initXHRRequest(xhrPool[i], i, file);
    data = initFormData(i, file);

    xhrPool[i].send(data);
}

function initFormData(uploaded, file) {
    var data = new FormData();
    data.append(uploaded, file);
    // parameters...

    return data;
}

function uploadProgress() {
    // code..
}

function initXHRRequest(xhr, uploaded, file) {
    // code... onreadystatechange...
    xhr.open("POST", "ajax/upload.php");
    xhr.setRequestHeader("X-File-Name", file.name);
}

function getXMLHttpRequest() 
{
    if (window.XMLHttpRequest) {
        return new XMLHttpRequest();
    }
    else {
        try {
            return new ActiveXObject("MSXML2.XMLHTTP.3.0");
        }
        catch(ex) {
            return null;
        }
    }
}
于 2012-09-18T09:25:23.050 に答える
2

HTML5 ファイル API を実際に実装したのは Safari が初めてで、いくつかのデモがあります。Andrea Giammarchi は、彼のブログで素晴らしい説明をしています。これを処理するためのフレームワークもいくつかあり、それらには Internet Explorer のフォールバックもあります。Fancyuploadは頭に浮かぶものです。

于 2011-07-29T07:01:47.823 に答える