3

これがマジックナンバーの意味へのリンクです: ファイルマジック

JavaScript を使用してファイルの最初の数バイト (マジック ナンバー) をリモートで読み取り、画像ファイルかどうかを判断するにはどうすればよいですか?

4

3 に答える 3

6

JavaScriptはメインのクライアント側言語であるため、他のサイトでホストされているファイルを自分のページからプログラムで単純に読み取ることはできません。XMLHttpRequestリモートデータを取得できますが、最初の数バイトではなく、ファイル全体を取得します。もっと凝ったことをするには、サーバー側のヘルパー、たとえばPHPスクリプトなどが必要になります。

また、一部のHTTPサーバーでは、出力から一定範囲のバイトを取得できないことにも注意する必要があります。これらのサーバーは、常にファイル全体を返します。したがって、たとえばcurlやwgetを使用するPHPスクリプトを使用しても、これをすべてのリモートサイトで機能させることができない場合があります。

Linuxコマンドを使用してHTTPサーバーから最初のNバイトのみを読み取ることは可能ですか?

(上記はコマンドラインカールをカバーしていますが、結論は広く適用できます。)

編集:Sergiuは、少なくとも一部のサーバーでは、Rangeヘッダーをに追加すると機能することを指摘しています(RangeヘッダーはHTTP 1.1ではオプションです)。XMLHttpRequestただし、クロスドメイン画像検索には、CORSなどのさらなるサポートが必要です。

于 2012-08-14T23:53:59.923 に答える
1

これには XMLHttpRequest を使用できます。

  • Rangeリクエスト ヘッダーを使用して、数バイトのみが必要であることを指定します。
  • ブラウザがクロス オリジンリクエストをサポートしている場合は、他のサイトで見つかった画像をリクエストすることもできます。それ以外の場合は、サーバーのみで作業する必要があります
  • ブラウザが十分に新しい場合は、応答にArrayBufferとしてアクセスして、個々のバイトを文字ではなくバイトとしてアクセスすることもできます

これは私のために働く:

var request = new XMLHttpRequest();
request.open('GET', '/download/logo.png');
request.setRequestHeader('Range', 'bytes=0-5');
request.responseType = 'arraybuffer'
request.addEventListener('load', function() {
  console.log(new Uint8Array(request.response));
});
request.send();
于 2012-08-15T00:23:23.943 に答える
1

SOには他にも同様の質問があります。これのように。
イメージをバイナリ データとして読み取ると役立つ場合があります。

最初の数バイトだけでなく、イメージ全体を読み取る必要があります。これは JavaScript の制限です。

于 2012-08-14T23:58:16.033 に答える