web-dev-qa-db-ja.com

画像を取得すると、画像ではなくファイルが表示されるのはなぜですか?

私がやります

wget http://services.runescape.com/m=itemdb_rs/3809_obj_Sprite.gif?id=2

そしてそれは次のファイルをダウンロードします:

3809_obj_Sprite.gif?id=2

次のように保存するにはどうすればよいですか?

2.png
6
Szymon Toda

なぜwgetがこの名前を選ぶのですか?

残念ながら、wgetは、指示がない限り、ダウンロードしたいものについて何も想定しません。ファイルが画像、ドキュメント、zipファイルなどであるかどうかは関係ありません。

ファイルは、URLの末尾が何であれ、最後のスラッシュからURLの末尾までのすべてとして保存されます。あなたの場合、それは.gif?id=2です。実際のファイル拡張子(.gif)の後の部分はURLに含まれていますが、それは HTTPクエリパラメーター です。ただし、wgetの場合は、出力ファイル名が決まります。

別のファイル名を設定するにはどうすればよいですか?

wgetの出力ファイル名を指定する場合は、-O(大文字のO)オプションを追加します。

wget example.com/something.gif?id=2 -O 2.gif

これにより、デフォルトの動作が上書きされ、ファイル名が2.gifに設定されます。 -o(小文字)オプションは、wgetがシェルに出力する可能性のあるログメッセージの出力ファイル名を指定することに注意してください。

最後に、--content-dispositionオプションがあり、可能性があります適切なファイル名が設定されます。ただし、これは、正しいヘッダー情報の送信からダウンロードするサーバーに完全に依存します。

このオプションは、Content-Dispositionヘッダーを使用してダウンロードされたファイルの名前を記述する一部のファイルダウンロードCGIプログラムに役立ちます。

このオプションは現在も実験的なものとしてマークされているため、デフォルトでは有効になっていません。


使用しているツールのマンページを読んで、それらの動作を理解することを強くお勧めします。 man wget と入力して、特にそれが提供するオプションを読み通してください。

また、@ Indrekが書いたことに対処するために あなたの質問へのコメント :タイプミスがあると思いますが、GIFファイルを.pngというファイルにダウンロードするつもりはありません—ただ拡張子を変更すると、notが自動的にPNGになります。 GIFとPNGは異なるエンコーディングを使用しており、これらの形式間で変換するには、あらゆる種類の画像変換ツールを使用する必要があります。ただし、この変換はロスレスであるため、「間違った」形式でファイルをダウンロードして後で変換しても害はありません。

38
slhck

コマンドラインオプションがあります--content-dispositionこれ(Webサイトが正しいヘッダーを提供している場合)により、ファイルが正しい名前で保存されるはずです。

私のdebianスクイーズボックスには、オプションは「実験的」と書かれていますが...

6
dualed

これは、パスを見ると、?id = 2で終わるため、このように保存されます。ファイルを移動するか、-Oパラメーターを使用してファイル名を定義できます。

3
Marcus Hughes

curlには、Content-Dispositionヘッダーからファイル名を推測するオプションもあります。

curl -OLJ http://services.runescape.com/m=itemdb_rs/3809_obj_Sprite.gif?id=2

ここに

-Oは、標準出力にフラッシュするのではなく、ファイルに保存するようにcurlに指示します
-Lはリダイレクトに従うようにします
-Jは、URLを分析する代わりに、Content-Dispositionによる推測を可能にします

1

Wgetにダウンロードするように指示したファイルが実際に画像である場合、ダウンロードするのは画像です。 wgetは、正しいファイル名と拡張子をわざわざ推測することはありません。URLで見つかったものを使用します。たとえば、http://foobar.com/photo.php?n=cat.pngは、photo.php?n=cat.pngのようなものになりますが、それでも画像です。問題を解決するには、そのファイルの名前を正しい名前cat.pngに変更するだけです。ほとんどのオペレーティングシステムでは、プログラムが特定のファイルを開くことができることを知るために、正しいファイル拡張子が必要であることに注意してください。

1
user150396

また、curlを使用して、リダイレクトのためにファイル名がどうなるかわからないと言うか、whathaveyo .. -Lを介してリダイレクトをたどります。正しい拡張子のファイルにパイプします。

curl -L http://links.mrgray.com/ocrtest > /files/file.png

wgetにも同様の機能があるかもしれません、dunno。

0
mralexgray