WebClient.DownloadData从某个Web地址生成损坏的文件

时间:2013-03-04 02:16:51

标签: asp.net .net

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

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#中使用相同的代码来查看它会做什么,但我得到了相同的结果..: - (

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

感谢。

1 个答案:

答案 0 :(得分:2)

查看来自该网络服务器的特定网址的响应标头,显示Content-Encoding:gzip。换句话说,它没有返回jpg,它正在返回一个gzip。 Web浏览器足够聪明,可以自动解码zip,但WebClient不是。请注意,gzip 不是你的标准.zip或“PK zip”,所以不要尝试将文件命名为.zip并期望它解压缩。

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