2011-01-17 20 views
7

HTML5機能を使用してファイルをアップロードしようとしています。調査の結果、ファイルをアップロードする方法は3通りあります。ブラウザのHTML5ファイルアップロード機能の検出

  1. ファイルをマルチパートとしてエンコードする:これはファイルリーダーのみがサポートされている場合に行われます。
  2. XMLHTTP2(AJAX)specメソッドを使用してバイナリデータを送信します。新しいメソッドsend(Blob/File)は、バイナリデータをワイヤを介して送信できます。
  3. FormDataオブジェクト:XMLHTTP(AJAX) send(FormData)メソッドを使用します。

今クロスブラウザの問題や機能の検出は、以下のようなスニペットのために簡単です、

if(typeof FileReader == "undefined") 

私は、現在のブラウザでAJAXの場合send()メソッドを見つける方法がわからないのですがsend(FormData) or send(Blob/File)を支援していますメソッドの実装。それを見つける方法?ここにObject.propertyトリックがありますか?それとも別の何か?

おかげで、

+1

typeof FileReader!= 'undefined'の場合、send(Blob/File)がサポートされているようですが、これは純粋に投機的です。 –

+0

http://stackoverflow.com/questions/2311887/how- html5-dragndrop-file-upload-api-like-from-from/2312859#2312859 –

+0

上記はFileReaderの権利に関するものですか? DataTranferオブジェクトはドラッグドロップにありますが、AJAXのsend()メソッドがFileオブジェクトをサポートしているかどうかわからないsend(File)を検出する方法について知りたいですか? –

答えて

2

あなたはWebSocketをを使用したいと思うでしょうバイナリデータを処理するために。これは新しいHTML5 specの一部です。しかし、問題があります。 2010年12月中旬時点で、キャッシュポイズニングの脆弱性のため、すべての主要ブラウザでWebSocketが無効になっていました。

最後に、これはまだsorted outであると聞きました。

ファイルをWebSocket経由で送信する前にアップロードするには、各ブラウザの最新バージョンでサポートされているFileReader APIを使用する必要があります。

確認するにはFileReaderのがサポートされている場合は以下のようにテストする必要があります。代替のため

if (window.URL){ 
    // 
} 

if (FileReader){ 
    // It's supported 
} 

またかどうかを確認することができます。

+0

(FileReader)がSafariでエラーをスローする場合。しかし、これは "if(window.FileReader)" – Dan

関連する問題