2013-06-07 18 views
7

私が使用しているこのjQueryのプラグインと、私はこのデモに再現することができますように私のウェブサイト上で同じ結果を見て:jQueryのファイルのアップロード、ゼロバイトのファイル

http://blueimp.github.io/jQuery-File-Upload/

デモで「アップロードサーバーは現在利用できません」と表示されていますが、デモに進み、0バイトのファイルをアップロードしようとすると問題は再現できます(JPG、GIF、PNGの拡張子が必要です)。

FireFoxとChromeでは、ゼロバイトファイルをPOSTしようとします。 IE10では、開発者ツールの[ネットワーク]タブを表示すると、XMLHTTPRequestオブジェクトが「保留中」の状態になっています。 IE10にゼロ以外のサイズのファイルをアップロードすると、データがPOSTされます。

私は、IE10のゼロバイトファイルに関する問題について尋ねたところ、他のいくつかの人しか検索していませんでした。彼らは私と同じjQueryプラグインを使用していないので、IE10の一般的な問題だと思います。また、私が今までに見つけた唯一の答えは、ユーザーがゼロバイトのファイルをアップロードすることを許可しないことです。可能であれば0バイトのファイルをサポートしたいと思っています。私のアプリケーションにはいくつかの使い方があり、時折自分自身を使用しています。

私のオプションは何ですか?

+0

アップロード時にファイルのサイズを確認するには、HTML 5 File Reader APIのようなものを使用する必要があります.Macamizizrのようなライブラリは、IE10を検出してから、とにかく投稿します。回避策 – Ohgodwhy

答えて

1

はまだ良い解決策を望んでいますが、これは私の答えになる、という欠け:IEでない場合

$(elem).fileupload({ 
    add: function(e, data) { 
     var file = data.files[0]; 
     if (file.size == 0 && ie >= 10) { 
      ajaxPostFileNameOnly(file.name); 
     } 
     else { 
      data.submit(); 
     } 
    } 
}); 

すなわちグローバルIEのバージョンに設定私のアプリでは、変数、または0です。私は機能の検出は通常より良いと知っていますが、この場合、この奇妙な問題を検出する方法がわからず、一部のブラウザではファイルサイズとして常にゼロが返される(Safariだと思います)。

ajaxPostFileNameOnlyは、ライブラリが行う通常のファイルアップロードを行うのではなく、単にファイル名のみを送信する単純なAJAXリクエストを作成する関数です。

EDIT:IE10はこのファイルアップロードライブラリのIEの以前のバージョンのように動作し、トランスポートにはiFrameを使用するだけです。

$(elem).fileupload({ 
    forceIframeTransport: !!ie 
}); 

と私は別のカップルから一緒に入れIEのバージョンを検出するために、いくつかのコードSOの回答(警告は、IE11 +は検出されません、IE10最も可能性が高いなど、それらを報告します):

var ie = (function() { 

var undef, 
    v = 3, 
    div = document.createElement('div'), 
    all = div.getElementsByTagName('i'); 

while (
    div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->', 
    all[0] 
); 

/*@cc_on 
if (/^10/.test(@_jscript_version)) { 
    v = 10; 
} 
@*/ 

return v > 4 ? v : undef; 

}()); 
6

私が持っていましたクライアントもこの問題に遭遇しました。私は何が原因であるか正確には分かっていませんが、ミックスにいくつかの情報を追加します。

InPrivateウィンドウを使用しているときに問題が消えました。私はその後、キャッシュのクリア、クッキーの消去、すべてのアドオンの無効化を試みました。それは問題を解決しませんでした。

次へ表示|インターネットオプション|高度なタブ| Internet Explorerの設定をリセットします。ユーザーはCookieやブックマークなどの設定を保持していました。再起動後、問題は解消されました。だから私はIEの設定がこれに責任があると推測しています。

他の人がこの問題を抱えている場合は、いくつかのテストシナリオを実行してコメントを残すことができれば便利です。たぶん、正確な原因を絞り込んで修正することができます。

  1. [セキュリティ]タブの[信頼済み]サイトのリストにドメインを追加してテストしてください。
  2. 前の段落で説明したのと同じ場所から「Reset Advanced Settings」ボタンをテストします。
関連する問題