2016-03-02 35 views
0

我回答得很好的問題here on SO導致了另一個問題。在Web應用程序中爲應用程序/八位字節流提供不同的文件類型有什麼意義?

我在原始問題中提到的Azure帳戶不受我們管理。下面是它的請求BLOB文件時收到的報頭的例子:

HTTP/1.1 200 OK 
Content-MD5: R57initOyxxq6dVKtoAx3w== 
Content-Type: application/octet-stream 
Date: Wed, 02 Mar 2016 14:32:35 GMT 
Etag: 0x8D3180DA8EBF063 
Last-Modified: Fri, 08 Jan 2016 09:25:33 GMT 
Server: Windows-Azure-Blob/1.0 Microsoft-HTTPAPI/2.0 
x-ms-blob-type: BlockBlob 
x-ms-lease-status: unlocked 
x-ms-request-id: 19d0a689-0001-0039-2990-74a33e000000 
x-ms-version: 2009-09-19 
Content-Length: 263748 

所以文件正在返回application/octet-stream我明白有效手段未知的文件類型。當我在瀏覽器中點擊URL時,即使文件是圖像,系統也會提示您下載。

最終,將以兩種方式使用此Blob存儲中的文件。有些圖像將用於網站圖像。其他是需要下載的「資產」(主要是PDF),而不是在瀏覽器中打開。

所以我的問題是,如果我將所有資產退回爲application/octet-stream,那麼在將其圖像用作Web內容並鏈接到其PDF下載時,是否會有任何負面影響?例如有瀏覽器會有不同的表現嗎?

換句話說,會不會有什麼優勢,如果我堅持標題改爲...

Content-Type: image/png 
Content-Disposition: inline; filename="picture.png" 

......還有......

Content-Type: application/pdf 
Content-Disposition: attachment; filename="file.pdf" 

回答

2

所以我的問題是,如果我離開blob存儲,所有資產 作爲應用程序/八位字節流返回,是否有任何負面的 影響時使用其圖像作爲網頁內容和鏈接到其 PDF可供下載?例如有沒有瀏覽器會有不同的行爲 ?

是的,瀏覽器的行爲有所不同。例如,如果您的內容類型爲application/octet-stream的Azure Blob存儲中存儲有png文件,則Chrome會始終下載該文件,但在Internet Explorer中將顯示該文件。因此,實質上,您將根據瀏覽器的類型來處理內容。

最終,這個blob存儲中的文件將以兩種方式使用。一些 是將用於網站圖像的圖像。其他是'資產' (主要是PDF),需要下載而不是在 瀏覽器中打開。

建議您爲想要在瀏覽器中顯示的內容正確設置內容類型。即使對於將要下載的內容,也請確保內容類型設置正確。對於下載的內容,有2個場景,你可能要考慮:

  1. 內容總是會下載:如果內容總是會被下載,你可以在Blob的內容處置屬性設置爲attachment; filename="file.pdf"
  2. 內容有時會被下載,但有時會被內嵌:在這種情況下,請不要設置blob的content-disposition屬性並正確設置其內容類型。因此,訪問內容時,默認情況下它將以內聯方式顯示。當您需要強制下載內容時,您可以在blob上創建Shared Access Signature (SAS),並至少使用Read權限並覆蓋SAS中blob的content-disposition屬性。當某人使用SAS URL訪問blob時,內容將始終被下載。
+0

謝謝你。 SAS可以在blob容器級別定義,還是必須針對單個blob創建? – getsetcode

+0

儘管在您的場景中可以在blob容器級別定義SAS,但是需要在blob級別定義SAS,因爲您將覆蓋SAS中的響應頭。 –

+0

謝謝。你一直很有幫助。 – getsetcode