2017-07-30 85 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