5

jQuery-File-UploadjQuery-Iframe-Transportを使用して、古いバージョンの IE のサポートを取得しようとしています。

forceIframeTransportすべてのブラウザーでほぼ同じように動作するようにオプションを設定しましたtrueが、iframe トランスポートを使用する場合、ブラウザーに関係なくサーバー側でデータを取得できないようです。

サーバー側のリクエストヘッダーを吐き出し、戻ってきました:

array(
    Host => "*******"
    Connection => "keep-alive"
    Content-Length => "0"
    Accept => "*/*"
    Origin => "**************"
    X-Requested-With => "XMLHttpRequest"
    User-Agent => "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.17 (KHTML, like Gecko) Chrome/24.0.1312.57 Safari/537.17"
    DNT => "1"
    Referer => "***********"
    Accept-Encoding => "gzip,deflate,sdch"
    Accept-Language => "en-GB,en-US;q=0.8,en;q=0.6"
    Accept-Charset => "ISO-8859-1,utf-8;q=0.7,*;q=0.3"
    Cookie => "*********"
)

[*****はブリープアウトされた情報を示します。あなたはそれを必要としません;)]

これは問題ないように見えますが、$_REQUEST空 (すなわちarray()) であり、入力バッファも空です:

$handle = fopen('php://input', 'r');

$file_data = '';

while(($buffer = fgets($handle, 4096)) !== false) {
    $file_data .= $buffer;
}

fclose($handle); // $file_data = '';

これは、iframe-transport を使用していないときにすべて正常に機能しましたが、IE のサポートが必要です... iframe を使用してファイルを送信した経験があり、データが送信されない理由を知っている人はいますか?


jQuery-File-Upload / js / jquery.iframe-transport.jsを使用して iframe トランスポートを強制すると、Chrome で動作しますが、リクエストは IE のサーバーに到達しません。

jquery-iframe-transport / jquery.iframe-transport.jsを使用して iframe トランスポートを強制すると、Chrome で壊れますが、Chrome は適切な XHR ファイル転送をサポートしリクエストは少なくとも IE のサーバーにヒットします、データは送信されないため、問題ありません。終えた。

いずれかの転送方法をサポートするようにスクリプトを更新しました。

if(empty($_FILES)) {
    $handle = fopen('php://input', 'r');

    $file_data = '';

    while(($buffer = fgets($handle, 4096)) !== false) {
        $file_data .= $buffer;
    }

    fclose($handle);
} else {
    $file_data = file_get_contents($_FILES['files']['tmp_name'][0]);
}

しかし、繰り返しますが、何をしてもIEでデータを取得できないようです。

「IE」と言うとき、私は今 IE 8 で具体的にテストしています。ただし、7 へのサポートが必要です。この男は、IE 6 までさかのぼってサポートしていると主張しています。

4

2 に答える 2

10

何時間も経って、ようやく問題を突き止めました。

最初に、 jQuery-file-upload にバンドルされているトランスポート プラグインを使用する必要があります。これは jQuery-file-upload用に作成されたものです ;) 他のプラグインがさらに一歩進んだ理由はよくわかりませんが、それについては後で説明します。分。

IE で、コア jquery ライブラリのどこかで「アクセスが拒否されました」という JavaScript エラーが発生していることに気付きました。私がオンラインで読んだことによると、これは通常、私が行っていない別のドメインの URL に送信しようとしたときに発生するため、却下しました。

2 つの異なるトランスポート スクリプトの違いを比較しているとform.submit()、一方のバージョンと他方のバージョンで述べた行にたどり着きform[0].submit()ました。そのため、を追加してみました[0]が、「アクセスが拒否されました」というエラーがその行を指すように変更されていることに気付きました。明らかに、ファイルの送信先が気に入らなかったのです。

を再確認しましたがform.action、URL は問題ないように見えました。いくつかのGoogle-fuを通じて、イベントが元の/ネイティブファイル入力要素から発生していない場合にもこのエラーが発生する可能性があることを発見しました。

ネイティブ入力を派手なものに置き換えてから、非表示のネイティブ入力で「偽の」「クリック」イベントをトリガーしました。これが気に入らなかった。

偽のアップロード ボタンを取り出して、ネイティブ ボタン ( <input type="file"/>fyi) を元に戻したところ、すべてのブラウザーですべてが魅力的に機能するようになりました。ハザ!

于 2013-02-15T00:20:38.700 に答える
0

それが価値があるもののために...

私は jQuery v1.9.1 を使用して、ファイルがサーバーにアップロードされる前に同期的にファイルのウイルス スキャンを実行していました。ファイルにウイルスが含まれている場合は HTTP 400 を返し、ウイルスが含まれていない場合は HTTP 200 を返します。

HTTP 400 応答により、IE8 の「アクセスが拒否されました」という結果が発生しました。

サーバーの応答を 400 から 401 に変更したところ、UI は完全に機能しました。

繰り返しますが、「その価値のために」。

于 2014-10-23T02:04:29.940 に答える