【发布时间】:2019-10-24 03:16:36
【问题描述】:
这是最离奇的事情。
我正在尝试使用 C# HttpClient 下载此文件: https://statics.teams.microsoft.com/evergreen-assets/skype/v2/smile/50.png
它恰好是 Microsoft Teams 表情图像文件之一。
(顺便说一句,我必须使用 Chrome 将这张图片本地下载到我的机器上,然后从那里上传,因为 StackOverflow 图片上传也无法处理 URL……)
我已经尝试了许多不同的破解代码来下载这个文件 - 最直接和最常用的方法是:
var client = new HttpClient();
var webStream = await client.GetStreamAsync("https://statics.teams.microsoft.com/evergreen-assets/skype/v2/smile/50.png");
using (var fileStream = new FileStream("smilely.png", FileMode.OpenOrCreate)) {
webStream.CopyTo(fileStream);
}
我尝试了几种使用 HttpClient、System.Net.WebClient 和原始 WebRequest 的不同方法,结果相同。
如果我将 URL 放入浏览器并转到它,我会按预期看到图像,但如果我从 C# 下载文件,我会得到一个无法打开的损坏图像。
使用浏览器下载的正确文件为 2127 字节,从正确的 PNG 标头字节开始,如下所示:
89 50 4E 47 0D 0A 1A 0A
我以编程方式下载的文件搞砸了,具有完全不同的字节流,只有 2093 个字节,并且开始:
1F 8B 08 00 00 00 00 00
我从同一个集合中下载其他表情图像没有这个问题,例如https://statics.teams.microsoft.com/evergreen-assets/skype/v2/laugh/50.png
这到底是怎么回事?
【问题讨论】:
-
1F 8B是 GZIP 的 magic number。
标签: c# microsoft-teams