ソースポイントが有効な画像であるかどうかを確認する最も信頼性の高い互換性のある方法は、Image
オブジェクトを使用することです。それが引き金となり、画像onload
としてそれを読み込むことができ、そうでない場合はonerror
がトリガされます:
var img = new Image;
img.onload = function() { /* OK */ };
img.onerror = function() { /* cannot read this as an image */ };
img.onabort = function() { /* connection or source was reset */ };
img.src = "URLtoCheckHere";
を欠点は、ブラウザがそれを読み、解読できるかどうかを調べることができる前に画像全体がロードされることはもちろんです。
何らかの理由でImage
を使用できない場合は、XHR経由でソースポイントを読み取ることができますが、それには独自の制限があります(cross-origin resource sharing)。イメージが同じ起源(プロトコル、ドメイン、ポートなど)でなく、外部サーバーがコス使用を許可しない場合、読み込みは単に失敗するだけです。
しかし、これらの制限が問題ではない場合(つまり、画像がページや親しみやすいサイトと同じサーバーからのものである場合)、画像の一部をArrayBuffer
として読み取って、magic numbersにあなたがサポートしたい画像タイプ。バイトオーダーに注意してください。
範囲を指定するには、Range
headerを使用します(ただし、サーバーがそれを尊重するかどうかはわかりません)。ファイルの一部を仮定し
がArrayBuffer
に読み込まれました:ファイルが有効なイメージファイルとして検出された場合でも、
var reader = new DataView(arrBuffer);
if (reader.getUint32(0) === 0x89504E47 &&
reader.getUint32(4) === 0x0D0A1A0A) {
// this seem to be a PNG file
}
else ... etc.
しかし、ファイルが破損していないことの保証はありませんし、そうです。このメソッドを使用してファイルを検証する方法はありません(あなた自身でパーサーを書くことを選択しない限り)。
結論として、ほとんどのシナリオではImage
が最善の選択肢です。メインブラウザで何年も何度も繰り返してきましたが、かなり堅牢で安定しています。
出典
2016-06-17 09:39:40
K3N
バックエンドでその仕事をすることはできますか? – VisioN
これらのURLはいつでも変更可能なフィードファイルに含まれているので、私は好きではありません。私はそれの後ろにキャッシングがないのが大好きです。私はAjaxの呼び出しを使用することができますが、バンド幅を増やすことになります。 –
あなたのフィードファイルには、ファイルが画像であるかどうかの情報が含まれている必要があり、それに応じてフロントエンドはそれに応じてデータを表示する必要があります。とにかく 'new Image'オブジェクトは、出力を操作するために使用できる[' onerror'](https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror)イベントをサポートしています。あるいは、私はリンクを 'background-image'スタイルでハックして、JavaScriptを一切取り除こうとするかもしれません。 – VisioN