日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 前端技术 > HTML >内容正文

HTML

【Java文件下载】如何让浏览器直接下载后端返回的图片,而不是直接打开

發(fā)布時(shí)間:2024/2/28 HTML 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java文件下载】如何让浏览器直接下载后端返回的图片,而不是直接打开 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

默認(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。