狠狠色丁香婷婷综合尤物/久久精品综合一区二区三区/中国有色金属学报/国产日韩欧美在线观看 - 国产一区二区三区四区五区tv

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

為什么瀏覽器中有些圖片、PDF等文件點擊后有些是預覽,有些是下載

freeflydom
2024年7月24日 16:7 本文熱度 1092
為什么瀏覽器中有些圖片、PDF等文件點擊后有些是預覽,有些是下載,
出現圖片、PDF不能預覽的情況,主要是通過代碼輸出文件流的形式,非IIS、Nginx下直接訪問資源的方式產生的


在HTTP中,用于文件下載的常見響應頭(response headers)包括:
Content-Disposition: 用于指示瀏覽器應該如何處理響應體。在文件下載中,通常設置為 attachment; filename="filename.jpg",其中 filename.jpg 是要下載的文件名。

Content-Type: 指示響應體的MIME類型,例如 image/jpeg 或 application/pdf。

Content-Length: 響應體的長度(以字節為單位)。

Cache-Control: 控制緩存的行為,通常可以設置為 no-cache 禁止緩存。

Expires: 指定響應的過期時間,與 Cache-Control 一起使用來控制緩存。

Pragma: 舊版本的HTTP使用的頭部,現在基本不再使用,可以設置為 no-cache。

Content-Disposition

Content-Disposition 是一個HTTP響應頭部,指示瀏覽器如何處理接收到的響應體內容。它可以讓服務器指定一個文件名,或者指示瀏覽器直接顯示內容(inline)或者將內容作為附件下載(attachment)。

  • inline:瀏覽器嘗試在頁面內顯示響應內容,通常用于非下載內容,如 PDF 在線預覽。

  • attachment:瀏覽器強制下載響應內容,并提示用戶保存到本地。

Content-Disposition: inline

Content-Disposition: attachment

Content-Disposition: attachment; filename="example.txt"

文件下載

通常情況下,服務器會使用 Content-Disposition: attachment 頭部來強制瀏覽器下載文件,而不是嘗試在瀏覽器中打開它。例如:

Content-Disposition: attachment; filename="example.pdf"

Content-Type: application/pdf

內聯顯示

服務器可能希望瀏覽器直接在頁面內顯示內容,而不是下載它。例如,對于一些直接展示的文件類型(如圖片、PDF等),可以使用

Content-Disposition: attachment; filename="example.pdf"

Content-Type: application/pdf

代碼示例

SpringBoot 接口輸出文件流:
https://www.cnblogs.com/vipsoft/p/16662762.html
https://www.cnblogs.com/vipsoft/p/16318030.html

//省去判斷,參考下面的C#

headers.add("Content-Disposition", "attachment; filename=" + URLEncoder.encode(file.getName(), "UTF-8"));   //如果是 attachment 換成 inline ,像PDF,圖片這樣的就可以在瀏覽器內直接預覽了

headers.add("filename",  URLEncoder.encode(file.getName(), "UTF-8"));

headers.add("Access-Control-Expose-Headers", "filename");  //這個要加,否則Vue 在 res.headers['filename'] 時取不到值

C# 偽代碼

[HttpGet]

[Route("reportFile")]

public HttpResponseMessage ReportFile([FromBody] Order param)

{

HttpResponseMessage result = null;

try

{

    string projectId = HttpContext.Current.Request.QueryString["ProjectId"];

FileInfo foundFileInfo = new FileInfo(filePath);

if(!foundFileInfo.Exists)

  return new HttpResponseMessage(HttpStatusCode.NotFound);

}

string mediaType = "application/pdf";

string contentDisposition = "attachment"; 

//根據服務器文件的擴展名決定使用什么樣的方式輸出

switch (foundFileInfo.Extension)

{

case ".xml":

mediaType = "text/xml"; 

contentDisposition = "inline; //瀏覽器預覽

break;

case ".pdf":

mediaType = "application/pdf";

contentDisposition = "inline; //瀏覽器預覽

break;

case ".jpg":

case ".jpeg":

mediaType = "image/jpg";

contentDisposition = "inline; //瀏覽器預覽

break;

case ".png":

mediaType = "image/png";

contentDisposition = "inline; //瀏覽器下載

break;

...

default:

mediaType = "application/octet-stream"; 

contentDisposition = "attachment"; //瀏覽器下載

break;

FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

result = new HttpResponseMessage(HttpStatusCode.OK);

result.Content = new StreamContent(fs);

//result.Content.Headers.Add("MD5File", Md5Helper.GetMD5HashFromFile(filePath)); //可以在Header里加上 md5 校驗碼

result.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue(mediaType);

result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue(contentDisposition);

result.Content.Headers.ContentDisposition.FileName = foundFileInfo.Name;

}

catch (Exception ex)

{

logger.Error(ex, ex.Message);

result = new HttpResponseMessage(HttpStatusCode.BadRequest);

}

return result;

}

常見的媒體類型

  • text/plain:純文本。

  • text/html:HTML 文檔。

  • application/json:JSON 數據。

  • application/xml:XML 數據。

  • image/jpeg、image/png:JPEG 或 PNG 圖像。

  • multipart/form-data:用于文件上傳的表單數據。

文件上傳

在使用表單上傳文件時,通常會使用 multipart/form-data 媒體類型,并指定邊界字符串。例如:

Content-Type: multipart/form-data; boundary=---------------------------7d33a816d302b6




該文章在 2024/7/24 16:07:53 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved