【问题标题】:WebClient.DownloadData produces corrupted files from a certain web addressWebClient.DownloadData 从某个网址生成损坏的文件
【发布时间】:2013-02-18 01:39:14
【问题描述】:

我正在使用以下代码下载图像:

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)

代码在大多数情况下都可以正常工作,但我们遇到了一个图像,一旦保存,就会损坏..

这是令人不安的网址: http://images.bookworld.com.au/images/bau/97817433/9781743315187/0/0/plain/the-storyteller.jpg

我尝试使用上面的代码,然后是“client.DownloadFile”行,认为它们可能有不同的结果,但我不断收到损坏的文件。

我可以点击 URL,Chrome 可以正常显示图像。我也可以将文件保存到我的本地机器上。但是使用上面的代码,我只会得到这个特定 URL 的损坏的 .jpg 文件。

我怀疑该图像在某种图像服务上,并且可能无法正确发送某些内容..但我不确定..

我什至在 C# 中尝试了相同的代码来看看它会做什么,但我得到了相同的结果.. :-(

如果有人能帮忙解决这个问题,我将非常感激..

谢谢。

【问题讨论】:

标签: asp.net .net


【解决方案1】:

查看来自该特定 URL 的 Web 服务器的响应标头会发现 Content-Encoding:gzip。换句话说,它不是返回 jpg,而是返回 gzip。 Web 浏览器足够聪明,可以自动解码 zip,但 WebClient 不是。请注意,gzip 不是您的标准 .zip 或“PK zip”,因此不要尝试将文件命名为 .zip 并期望它能够解压缩。

可以让WebClient 自动解码 gzip 响应,但需要一些技巧 - Uncompressing gzip response from WebClient

【讨论】:

  • 就是这么简单...非常感谢..我看到文件被压缩了,但我什至认为这不是问题..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-25
  • 1970-01-01
  • 1970-01-01
  • 2020-12-29
  • 2019-02-02
相关资源
最近更新 更多