亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > Java > 正文

SpringMVC文件上傳及查看的示例代碼

2024-07-13 10:16:25
字體:
來源:轉載
供稿:網友

寫在前面

談到文件上傳,首先要說業務邏輯,如果上傳的文件大家都可以看(比如廣告或者首頁的banner)等,那么我們就把圖片放在靜態資源區(與css,js一樣的位置)中,如果文件是受保護的(像用戶只能查看自己上傳的照片),那么我們就把它存放在服務器中的某個專門存放圖片的位置。

本例分別展示了存放在兩個位置的上傳文件的方法,上傳之后,作為延伸,還添加了查看上傳的文件以及下載已經上傳的文件的功能。

準備工作

配置SpringMVC,導入commons包

在mvc-servlet.xml中配置文件上傳解析器

<!--文件上傳解析器--> <bean id="multipartResolver"  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  <property name="maxUploadSize" value="1000000"/>  <property name="defaultEncoding" value="UTF-8" /> </bean>

存放在靜態資源區

1、存放位置:

存放在項目中,所以路徑為相對項目的路徑。

/{yourproject}/webapp/static/img

2、配置響應的handler

@Controllerpublic class UploadController { @GetMapping("/upload") public String UploadHandler() { return "upload"; } @PostMapping("/upload/static") public void wriToStatic(HttpServletRequest request,       RedirectAttributes redirectAttributes,       @RequestParam("fileName") MultipartFile file) { if(!file.isEmpty()) {  //獲取目標文件夾  String path = request.getServletContext().getRealPath("/") + "static/img/";  //獲取用戶上傳的源文件名  String fileName = file.getOriginalFileName();  //新建文件  File file1 = new File(path, fileName);  //將文件寫入  file.transferTo(file1);  redirectAttributes.addFlashAttribute("message","upload to static success");  return "redirect:/upload"; } else {  redirectAttributes.addFlashAttribute("message","upload file can not be empty");  return "redirect:/upload"; } }}

存放在服務器

1、本例存放位置:

存放在服務器某個位置,與項目無關,所以地址為絕對路徑。

/Users/mac/Desktop/imgtemp/, 為目錄的絕對路徑。

2、配置響應的handler

...@PostMapping("/upload/disk")public String writeToDisk(HttpServletRequest request,       @RequestParam("fileName") MultipartFile file,       RedirectAttributes redirectAttributes) { if(!file.isEmpty()) { //獲取源文件名 String fileName = file.getOriginalFileName(); //獲取保存文件文件夾路徑 String path = "/Users/mac/Desktop/imgtemp/"; //新建文件 File file1 = new File(path,fileName); //寫入文件 file.transferTo(file1); }}...

延伸部分(文件的查看及下載)

由于響應是要以流的形式傳遞文件,我們需要正確的設置響應的MIMIE類型才能被瀏覽器正確的解析,應用程序文件的默認MIMIE類型為 application/octet-stream,MIME設置為該值后,瀏覽器不會自動執行或詢問執行這類文件,會以對待附件的形式直接將文件下載至本地。

更多關于MIMIE的解讀請查看這篇文章

如果我們如果想自定義下載文件的名字,那么就需要設置Content-Disposition消息。
Content-Disposition 消息頭指示回復的內容該以何種形式展示,是以內聯的形式(即網頁或者頁面的一部分),還是以附件的形式下載并保存到本地。

更過關于Content-Disposition的解讀請查看這篇文章

...@GetMapping("/download/byDefault")public void getImgByDefault(@RequestParam String fileName,       @RequestParam(required=false,defaultValue="") String saveName),       HttpServletResponse response { if(StringUtils.isEmpty(fileName)) {  response.sendError(404);  return; } //文件存放的路徑 String path = "/Users/mac/Desktop/imgtemp/"; //新建文件 File file = new File(path,fileName); if(!file.exists()) {  response.sendError(404);  return; } //如果請求參數saveName不為空,進行文件的下載 if(!StringUtils.isEmpty(saveName)) {  //設置響應長度  response.setContentLength((int)file.length());  //設置響應的MIME類型為application/octet-stream  response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);  saveName = new String(saveName.getBytes("UTF-8"),"ISO8859-1");  //設置content-disposition為attachment;fileName=saveName  response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=/""+saveName+"/""); } //讀取文件 InputStream is = new FileInputStream(file); OutputStream os = response.getOutputStream(); //將文件以流的形式輸出 IOUtils.copy(is,os); os.flush(); os.close(); is.close();}

我們還可以使用SpringMVC自帶的 ByteArrayHttpMessageConverter 轉化器來將文件輸出,該轉換器實現 HttpMessageConverter 接口??勺x取所有MIME的請求信息,響應信息的MIME為 application/octet-stream

...@GetMapping("/download/byConvert")public HttpEntity<byte[]> getImgByConvert(@RequestParam String fileName,           @RequestParam(required=false,defaultValue="") String saveName) { if(StringUtils.isEmpty(fileName)) {  return new ResponseEntity<>(HttpStatus.NOT_FOUND); } String path = "/Users/mac/Desktop/imgtemp/"; File file = new File(path,fileName); if(!file.exists()) {  return new ResponseEntity<>(HttpStatus.NOT_FOUND); } HttpHeaders headers = new HttpHeaders(); if(!StringUtils.isEmpty(saveName)) {  headers.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);  headers.setContentLength(file.length());  saveName = new Sting(saveName.getBytes("UTF-8"),"ISO8859-1");  headers.add(HttpHeaders.CONTENT_DISPOSITION,"attachment;fileName=/"" + saveName + "/""); } else {  headers.setContentType(MediaType.IMAGE_PNG); } return new HttpEntity<>(FileCopyUtils.copyToByteArray(file),headers);}

upload.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %><%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %><!doctype html><html><head> <meta charset="UTF-8"> <meta name="viewport"   content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <link rel="stylesheet" href="/static/bootstrap-3.3.5-dist/css/bootstrap.css" rel="external nofollow" ></head><body><div class="container"> <h1 class="text-center">上傳文件撒</h1> <c:if test="${not empty message}">  <h2>${message}</h2> </c:if> <form:form enctype="multipart/form-data" action="/upload/static">  <p class="text-info">上傳至/web/static</p>  <label for="">上傳文件:</label>  <input type="file" name="uploadFile">  <button class="btn btn-default">提交</button> </form:form> <form:form enctype="multipart/form-data" action="/upload/disk">  <p class="text-info">上傳至Disk</p>  <label for="">上傳文件</label>  <input type="file" name="uploadFile">  <button class="btn btn-default">提交</button> </form:form> <div class="container">  <button class="btn btn-default">   <a href="/download/byDefault?fileName=dubbo.png" rel="external nofollow" target="_blank">使用默認方式查看上傳至Disk的dubbo圖片</a>  </button>  <button class="btn btn-default">   <a href="/download/byDefault?fileName=dubbo.png&saveName=dubb.png" rel="external nofollow" >使用默認方式下載dubbo圖片</a>  </button> </div> <div class="container">  <button class="btn btn-default">   <a href="/download/byConvert?fileName=dubbo.png" rel="external nofollow" target="_blank">使用MVC轉化器查看上傳至Disk的dubbo圖片</a>  </button>  <button class="btn btn-default">   <a href="/download/byConvert?fileName=dubbo.png&saveName=dub.png" rel="external nofollow" >使用MVC轉化器下載上傳至Disk的dubbo圖片</a>  </button> </div></div></body></html>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VeVb武林網。


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美一级电影免费在线观看| 久久久精品视频成人| zzijzzij亚洲日本成熟少妇| 在线日韩第一页| 国产成人精品av在线| 欧美成人sm免费视频| 亚洲天堂av综合网| 久久精品国产视频| 欧美日韩国产中字| 北条麻妃在线一区二区| 5278欧美一区二区三区| 91网在线免费观看| 久久69精品久久久久久久电影好| 亚洲精品国产综合区久久久久久久| 亚洲精品在线观看www| 最近2019中文字幕mv免费看| 日韩中文字幕视频| 成人午夜激情网| 久久久免费高清电视剧观看| 国产xxx69麻豆国语对白| 精品国偷自产在线视频99| 欧美国产日韩一区二区在线观看| 韩国精品久久久999| 国产精品成人观看视频国产奇米| 在线播放国产精品| 精品国内亚洲在观看18黄| 国产suv精品一区二区三区88区| 国产成人久久久| 久久久久久18| 日本高清视频一区| 日本亚洲欧美三级| 国产精品黄色av| 日韩美女在线观看一区| 美女av一区二区三区| 国产精品久久久久久久久久久新郎| 97超级碰碰人国产在线观看| 国产成人精品电影| 国产精品美女免费| 久久久精品国产亚洲| 亚洲欧美在线免费观看| 欧美另类在线观看| 国产亚洲精品久久| 久久人人爽国产| 国产精品欧美一区二区三区奶水| 欧美精品成人91久久久久久久| 久久亚洲精品一区二区| 日韩av有码在线| 亚洲理论在线a中文字幕| 日韩欧美亚洲成人| 另类天堂视频在线观看| 国产精品亚洲一区二区三区| 91tv亚洲精品香蕉国产一区7ujn| 91av在线视频观看| 在线国产精品播放| 色阁综合伊人av| 亚洲在线视频福利| 久久99久久99精品免观看粉嫩| 欧美激情中文网| 亚洲欧洲激情在线| 久久av红桃一区二区小说| 久久久免费观看视频| 亚洲国产小视频| 国产一区二区日韩| 亚洲精品网站在线播放gif| 91视频8mav| 欧美激情免费看| 国产中文欧美精品| 欧美激情视频在线免费观看 欧美视频免费一| 538国产精品视频一区二区| 亚洲曰本av电影| 美女性感视频久久久| www.欧美三级电影.com| 欧美激情视频网| 欧美一区二区视频97| 国产精品免费视频xxxx| 日韩欧美在线免费观看| 中文字幕亚洲一区在线观看| 国产精品爱久久久久久久| 久久久999成人| 国产成人中文字幕| 精品久久香蕉国产线看观看gif| 国产精品网站大全| 亚洲色图色老头| 136fldh精品导航福利| 激情亚洲一区二区三区四区| 欧美成在线视频| 亚洲在线www| 国产精品久久一| 欧美一级淫片videoshd| 色yeye香蕉凹凸一区二区av| 日韩在线视频线视频免费网站| 精品亚洲一区二区三区| 久久亚洲欧美日韩精品专区| 亚洲亚裔videos黑人hd| 97香蕉超级碰碰久久免费的优势| 国产精品久久久久久久久久久久| 国产精品免费福利| 日韩视频在线免费| 成人激情视频在线| 国产欧美精品日韩精品| 最近更新的2019中文字幕| 最新国产精品亚洲| 精品亚洲国产视频| 中文字幕日韩欧美在线视频| 91在线免费视频| 伊人男人综合视频网| 欧美肥臀大乳一区二区免费视频| 欧美日韩福利在线观看| 欧美日韩人人澡狠狠躁视频| 精品性高朝久久久久久久| 成人自拍性视频| 国产精品99久久久久久白浆小说| 亚洲品质视频自拍网| 久久精品在线播放| 亚洲精品视频中文字幕| 亚洲国产精品人久久电影| 亚洲自拍另类欧美丝袜| 精品亚洲一区二区三区在线观看| 色综合久久精品亚洲国产| 欧美激情性做爰免费视频| 国产精品伦子伦免费视频| 九九热这里只有在线精品视| 国产精品视频在线观看| 国产精品h片在线播放| 国产+成+人+亚洲欧洲| 夜夜嗨av一区二区三区四区| 亚洲欧洲成视频免费观看| 色一区av在线| 亚洲欧美国产精品| 日韩精品欧美国产精品忘忧草| 国产精品视频久久久| 国产成人av网址| 日韩免费观看高清| 亚洲国产成人久久综合一区| 久久久久久久一区二区| 另类图片亚洲另类| 久久福利视频导航| 亚洲国产欧美在线成人app| 日韩有码片在线观看| 欧美有码在线观看视频| 国内精品在线一区| 欧美黑人巨大精品一区二区| 欧美精品videosex性欧美| 欧美性xxxx18| 日韩亚洲欧美成人| 国产剧情久久久久久| 亚洲精品久久久久久久久久久久久| 成人黄色免费网站在线观看| 中文字幕久久精品| 欧美成人精品在线视频| 国产视频福利一区| 亚洲欧美在线x视频| 国产精品99久久99久久久二8| 亚洲欧美视频在线| 亚洲福利视频二区| 免费不卡在线观看av| 日韩在线一区二区三区免费视频| 日本精品久久久| 九九热精品在线| 91精品国产高清久久久久久久久| 国产一区二区三区精品久久久| 色琪琪综合男人的天堂aⅴ视频| 久久久精品一区| 午夜精品福利在线观看|