【Java文件下载】如何让浏览器直接下载后端返回的图片,而不是直接打开
默認(rèn)情況下,瀏覽器設(shè)定是inline形式,對(duì)于服務(wù)器返回的文件,能打開(kāi)就打開(kāi),不能打開(kāi)就自動(dòng)下載。
Content-Disposition 設(shè)置
大多數(shù)情況下,后端都是實(shí)現(xiàn)一個(gè)文件管理的功能,通過(guò)文件的唯一標(biāo)志去獲取文件流。后端都會(huì)讀取文件,然后文件的流寫(xiě)入到response的輸出流,這樣就可以實(shí)現(xiàn)文件的訪問(wèn)了。
但是有些時(shí)候,實(shí)現(xiàn)下載功能,后端返回的是圖片,瀏覽器卻直接把圖片打開(kāi)了?怎么回事?
這就是Content-Disposition設(shè)置的問(wèn)題,如下都是java示例:
設(shè)置為inline,如果瀏覽器支持該文件類型的預(yù)覽,就會(huì)打開(kāi),而不是下載:
response.setHeader("Content-Disposition", "inline; filename=111.jpg");
設(shè)置為attachment,瀏覽器則直接進(jìn)行下載,縱使他能夠預(yù)覽該類型的文件。
response.setHeader("Content-Disposition", "attachment; filename=111.jpg");
特別說(shuō)明:Chrome不設(shè)置Content-Type也會(huì)自動(dòng)打開(kāi),如果是它可識(shí)別預(yù)覽的文件。
示例代碼
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 {// 設(shè)置響應(yīng)流中文件進(jìn)行下載// attachment是以附件的形式下載,inline是瀏覽器打開(kāi)// bbb.txt是下載時(shí)顯示的文件名 // res.setHeader("Content-Disposition", "attachment;filename=bbb.txt"); // 下載res.setHeader("Content-Disposition", "inline;filename=bbb.txt"); // 瀏覽器打開(kāi)// 把二進(jìn)制流放入到響應(yīng)體中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();} }瀏覽器直接打開(kāi)效果
下載效果
總結(jié)
以上是生活随笔為你收集整理的【Java文件下载】如何让浏览器直接下载后端返回的图片,而不是直接打开的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【MyBatis】sql列名与实体类属性
- 下一篇: 2017年html5行业报告,云适配发布