2017-07-30 83 views
1

我试图通过我的ASP.NET Core API返回动画GIF,但只有一些返回的GIF实际上是动画的。那些不工作的只显示第一帧,从不动画,那些工作像普通GIF一样播放。我无法弄清楚为什么一些工作和其他人不这样做。全部返回Content-Type: image/gif,并且Content-Length设置正确。我的代码如下。我究竟做错了什么?由API返回的GIF不是动画


一些示例图片:

(根据记录,这只是一个小的辅助项目获得与MVC核心的一些更多的经验。我并不想绕过imgur的广告。)


铬抛出这个在所有图像的控制台上,无论它们是否动画。

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

它看起来像'http:// my.url'返回一个文件而不是gif。 – Dealdiane

+0

@Dealdiane:我在想同样的事情,但是OP提到了一些工作,有些没有 – garfbradaz

+0

@vaindil:是否可以链接几个工作的GIF和一对夫妇? – garfbradaz

回答

2

问题是与imgur。它根据请求的内容提供不同版本的.gif文件,并可能基于用户代理或引用者或请求的其他部分。他们会将GIF重定向到他们的.gifv播放器/兼容性页面,以避免提供大文件。如果您查看正在投放的实际内容,则应该看到它要么为您提供了HTML页面,要么为其提供了GIF的非动画缩略图版本。 (您可以通过在URL中为图像ID的末尾添加'h'来手动查看该版本 - 例如:https://i.imgur.com/Emgu5Dyh.gif。)

两个不起作用的东西有两个共同点:它们是创建的通过imgur的vidgif工具,他们都超过30MB的大小。另外两个都以.gif文件格式上传,不超过15MB。无论是什么区别或imgur的逻辑,它必须导致HTML播放器页面出现问题,或者imgur仅为vidgif页面提供缩略图版本。

在请求中使用普通浏览器用户代理可能会改变此行为。

如果很重要,那么获得.mp4版本可能会更好。每个GIF都不会有一个 - 你的第三个例子不会有一个,因为它非常小。对于这些情况,您可以回退到.gif(或.jpg)。

+1

完美,正是我所需要的。我切换到大多数(使用gif后备)的MP4版本,事情运行顺利。谢谢! – vaindil