通常FileReader.read...
、エラーを実行してカタパルトするだけが(非同期の)方法です。
ただし、場合によっては、実際の転送を開始する前にアクセスを同期的にチェックする方がよい場合があります (以下の例を参照)。
- このようなものにすることはできますか(疑似コードで、この SO 投稿に基づいて) ?
実際にファイル全体を読み取らずに true を返すことはできますか?
function is_readable(file) { // File object var ok = null function check(e) { ok = (SOME.ERROR.CONDITION.HERE ? false : true) // perhaps: e.target.result? } var blob = file.slice(0, 1) // does slice() make any sense here? var reader = new FileReader() // not sure which events to buy: reader.onload = check reader.onerror = check reader.readAsArrayBuffer(blob) // sync here for the result: while (ok === null) { alert('...waiting...') } return ok }
例:
一括アップロード (複数ファイルでファイルを選択し、
INPUT
[すべてアップロード] ボタンが押されるまで送信しない) の場合、読み取れないファイルを赤で一覧表示する必要があります。このために、リスト ビルダー ループでは、 のように各File
オブジェクトの色を選択するだけです。f
is_readable(f) ? 'green' : 'red'
XMLHttpRequest.send()
Chrome(25) は何らかの理由でここでエラーを設定していないようで、ファイルを喜んで投稿しますが、ファイルが読み取れない場合は黙って 0 バイトに切り捨てます。回避策として、事前に自分で確認したいと思います。
(注: php.jsを確認しましたが、これはないようです。)