我试图通过我的ASP.NET核心API返回动画GIF,但只有一些返回的GIF实际上是动画的。那些不起作用的那些只显示第一帧而且从不动画,那些工作的就像普通的GIF一样。我无法弄清楚为什么有些工作和其他工作没有。所有内容均返回Content-Type: image/gif
,Content-Length
设置正确。我的代码如下。我做错了什么?
一些示例图片:
(为了记录,这只是一个小型的项目,可以获得更多MVC Core的经验。我并没有试图绕过imgur的广告。)
Chrome会在所有图片的控制台中将其抛出,无论它们是否有效。
Resource interpreted as Document but transferred with MIME type image/gif: "localhost:22222/filename.gif".
我的代码:
var img = await _client.GetStreamAsync("http://my.url");
// necessary to get the correct content length
var contents = new MemoryStream();
await img.CopyToAsync(contents);
Response.ContentLength = contents.Length;
contents.Seek(0, SeekOrigin.Begin);
return File(contents, "image/gif");
答案 0 :(得分:2)
问题在于imgur。它根据请求的内容提供不同版本的.gif文件,可能还基于用户代理或引用者或请求的其他部分。他们将类似地将GIF重定向到他们的.gifv播放器/兼容性页面,以避免提供大型文件。如果您查看所投放的实际内容,您应该看到它为您提供了所述网页的HTML,或者它正在为GIF的非动画缩略图版本提供服务。 (您可以通过在网址中的图片ID末尾添加' h来手动查看该版本 - 例如:https://i.imgur.com/Emgu5Dyh.gif。)
两个不工作的人有两个共同点:它们是通过imgur的vidgif工具创建的,而且它们的大小都超过30MB。其他两个都作为.gif文件上传,不超过15MB。无论差异或imgur的逻辑是什么,它必然会导致HTML播放器页面出现问题,或者imgur只为vidgif提供缩略图版本。
您的请求中使用普通浏览器用户代理可能会改变此行为。
如果重要,那么最好不要使用.mp4版本。每个GIF都不会成为一个 - 你的第三个例子因为它很小而没有一个。对于这些情况,您可以回退到.gif(或.jpg)。