【Java文件下载】如何让浏览器直接下载后端返回的图片,而不是直接打开
生活随笔
收集整理的這篇文章主要介紹了
【Java文件下载】如何让浏览器直接下载后端返回的图片,而不是直接打开
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
默認情況下,瀏覽器設定是inline形式,對于服務器返回的文件,能打開就打開,不能打開就自動下載。
Content-Disposition 設置
大多數情況下,后端都是實現一個文件管理的功能,通過文件的唯一標志去獲取文件流。后端都會讀取文件,然后文件的流寫入到response的輸出流,這樣就可以實現文件的訪問了。
但是有些時候,實現下載功能,后端返回的是圖片,瀏覽器卻直接把圖片打開了?怎么回事?
這就是Content-Disposition設置的問題,如下都是java示例:
設置為inline,如果瀏覽器支持該文件類型的預覽,就會打開,而不是下載:
response.setHeader("Content-Disposition", "inline; filename=111.jpg");
設置為attachment,瀏覽器則直接進行下載,縱使他能夠預覽該類型的文件。
response.setHeader("Content-Disposition", "attachment; filename=111.jpg");
特別說明:Chrome不設置Content-Type也會自動打開,如果是它可識別預覽的文件。
示例代碼
package cn.hanquan.controller;import java.io.File; import java.io.IOException;import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse;import org.apache.commons.io.FileUtils; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView;@Controller public class DemoDownload {@RequestMapping("download")public void download(String filename, HttpServletResponse res, HttpServletRequest req) throws IOException {// 設置響應流中文件進行下載// attachment是以附件的形式下載,inline是瀏覽器打開// bbb.txt是下載時顯示的文件名 // res.setHeader("Content-Disposition", "attachment;filename=bbb.txt"); // 下載res.setHeader("Content-Disposition", "inline;filename=bbb.txt"); // 瀏覽器打開// 把二進制流放入到響應體中ServletOutputStream os = res.getOutputStream();System.out.println("here download");String path = req.getServletContext().getRealPath("files");System.out.println("path is: " + path);System.out.println("fileName is: " + filename);File file = new File(path, filename);byte[] bytes = FileUtils.readFileToByteArray(file);os.write(bytes);os.flush();os.close();} }瀏覽器直接打開效果
下載效果
總結
以上是生活随笔為你收集整理的【Java文件下载】如何让浏览器直接下载后端返回的图片,而不是直接打开的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【MyBatis】sql列名与实体类属性
- 下一篇: 【Spring】JSP 九大内置对象、作