0

次のコードを使用して画像をダウンロードしています。

Dim strImageURL as string = "http://images.bookworld.com.au/images/bau/97817433/9781743315187/0/0/plain/the-storyteller.jpg"
Dim data As Byte()
Using client As New WebClient()
  data = client.DownloadData(strImageURL)
  'client.DownloadFile(strImageURL, "MyFile.jpg")
End Using
File.WriteAllBytes("\\mappedPath\Images\MyFile2.jpg", data)

ほとんどの場合、コードは問題なく動作しますが、一度保存した画像が破損していることがあります..

これは厄介な URL です: http://images.bookworld.com.au/images/bau/97817433/9781743315187/0/0/plain/the-storyteller.jpg

上記のコードを使用してから、「client.DownloadFile」行を使用して、結果が異なる可能性があると考えてみましたが、ファイルが破損し続けています。

URL をヒットすることができ、Chrome は画像を正常に表示します.ファイルをローカル マシンに保存することもできます..しかし、上記のコードを使用すると、この特定の URL の .jpg ファイルが破損するだけです..

画像はある種の画像提供サービスにあり、おそらく何かを正しく送信していないと思われます..しかし、よくわかりません..

C# で同じコードを試してみましたが、同じ結果が得られました.. :-(

誰かがこれを整理するのを手伝ってくれるなら、私はとても感謝しています..

ありがとう。

4

1 に答える 1

3

その特定の URL に対する Web サーバーからの応答ヘッダーを見ると、Content-Encoding:gzip. つまり、jpg を返すのではなく、gzip を返します。Web ブラウザは、zip を自動的にデコードするほど賢いですが、WebClientそうではありません。gzip は標準の .zip または「PK zip」ではないことに注意してください。そのため、ファイルに .zip という名前を付けて、解凍されることを期待しないでください。

gzip 応答を自動的にデコードすることは可能ですWebClientが、いくつかのトリックが必要です - Uncompressing gzip response from WebClient

于 2013-03-04T03:06:59.857 に答える