javascript
SpringMVC_文件上传
?1:創建文件上傳的jsp文件(test_fileupload.jsp)
<body> <from enctype="multipart/form-data" method="post" action="/upload.do">選擇圖片:<input type="file" name="photo"><input type="submit" value="上傳"> </from> </body>?2:創建文件上傳的Controller
在上傳文件的方法中添加參數 MultiparFile,該參數本身是一個接口,該接口提供了文件上傳的方法
// 獲得文件名 getOriginalFilename()// 判斷是否上傳了文件,如果沒有選擇文件上傳的話,此時結果為true isEmpty()//獲得上傳文件的文件類型 getContentType()// 將文件上傳至指定目錄中 transferTo(File file)// 獲取表單中input的name值 getName()// 獲取上傳文件的byte數組 getBytes()// 獲取上傳文件的InputStream對象 getInputStream()方法中需要的另一個參數為 HttpSession,其作用是獲取服務器中用來存放上傳文件的路徑
package com.doaoao.comtroller;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpSession; import java.io.File;@Controller public class UploadController {@RequestMapping("/upload.do")public ModelAndView upload(MultipartFile photo, HttpSession session) throws Exception{ModelAndView mv = new ModelAndView();// 判斷用戶是否上傳文件if(!photo.isEmpty()){// 取得服務器上傳的文件路徑String path = session.getServletContext().getRealPath("/upload");// 獲取文件名稱String filename = photo.getOriginalFilename();// 限制文件的上傳類型if("image/png".equals(photo.getContentType())){File file = new File(path,filename);photo.transferTo(file);}else{// 文件上傳失敗時mv.addObject("msg","請選擇文件格式為png");mv.setViewName("/upload_fail");return mv;}}else{mv.addObject("msg","請上傳一張png格式圖片");mv.setViewName("/upload_fail");return mv;}// 文件上傳成功時mv.setViewName("/upload_success");return mv;} }?3:兩種文件上傳方式
# 1 使用 apache中的commons-io 和 commons-fileupload實現文件上傳
# 2 使用servlet3.0實現文件上傳
## 第一種文件上傳方式:使用 apache中的commons-io 和 commons-fileupload實現文件上傳
<!-- 導入相關jar包 --> <dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.6</version> </dependency> <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version> </dependency>修改配置文件 springmvc.xml
<!--注冊multipartResolver,由DispatcherServlet來負責調用,id的名稱必須寫為 multipartResolve--> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><!--設置字符編碼防止文件名亂碼--><property name="defaultEncoding" value="utf-8"/><!--設置上傳文件的總大小,單位是字節b--><property name="maxUploadSize" value="1048576"/><!--設置單個上傳文件的大小,單位是字節b--><property name="maxUploadSizePerFile" value="1048576"/><!--設置內存緩沖區的大小,當超過該值的時候會寫入到臨時目錄--><property name="maxInMemorySize" value="1048576"/><!--設置臨時目錄--><property name="uploadTempDir" value="tempupload"/><!--默認是false,如果設置為true的話,不會將文件路徑去除,在IE瀏覽器下上傳時會將路徑名也作為文件名上傳--><property name="preserveFilename" value="false"/><!--是否使用懶加載,默認是false--><property name="resolveLazily" value="true"/> </bean>? 上方配置文件中設置臨時目錄的作用:
1:提高安全性:將文件上傳到臨時目錄,相當于對客戶端隱藏了文件真實存放的目錄
2:便于管理:當用戶取消文件上傳或文件上傳失敗時,可直接操作臨時目錄即可,無需對真實目錄進行操作
## 第二種文件上傳的方式:使用servlet3.0實現文件上傳
修改web.xml配置文件的內容
<!--使用servlet3.0實現文件上傳--> <multipart-config><!--臨時文件路徑,臨時文件路徑需配置在第一行--><location>/temp</location><!--單個上傳文件的最大值,單位是byte--><max-file-size>100</max-file-size><!--總上傳文件的最大值--><max-request-size>52428800</max-request-size><!--內存緩沖區的大小,當超過該值時,會寫入到臨時文件中,單位是byte--><file-size-threshold>1024</file-size-threshold> </multipart-config>修改配置文件 springmvc.xml
<bean id="multipartResolver" class="org.springframework.web.multipart.support.StandardServletMultipartResolver"/> 二:上傳多個文件1:修改jsp文件種的內容
<from enctype="multipart/form-data" method="post" action="/upload.do">選擇圖片:<input type="file" name="photos">選擇圖片:<input type="file" name="photos">選擇圖片:<input type="file" name="photos"><input type="submit" value="上傳"> </from>2:在Controller種添加方法,方法種添加參數 MultipartFile[],并在參數前加上注解@RequestParam
package com.doaoao.comtroller;import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpSession; import java.io.File;@Controller public class UploadController {@RequestMapping("/upload.do")public ModelAndView upload(@RequestParam MultipartFile[] photos, HttpSession session) throws Exception{ModelAndView mv = new ModelAndView();// 取得服務器上傳的文件路徑String path = session.getServletContext().getRealPath("/upload");for(MultipartFile photo:photos) {// 判斷用戶是否上傳文件if (!photo.isEmpty()) {// 獲取文件名稱String filename = photo.getOriginalFilename();// 限制文件的上傳類型if ("image/png".equals(photo.getContentType())) {File file = new File(path, filename);photo.transferTo(file);} else {// 文件上傳失敗時mv.addObject("msg", "請選擇文件格式為png");mv.setViewName("/upload_fail");return mv;}} else {mv.addObject("msg", "請上傳一張png格式圖片");mv.setViewName("/upload_fail");return mv;}}// 文件上傳成功時mv.setViewName("/upload_success");return mv;} }?...
本筆記參考自:小猴子老師教程 http://www.monkey1024.com
轉載于:https://www.cnblogs.com/Doaoao/p/10693894.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的SpringMVC_文件上传的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 实现日志管理的两种方式:aop、拦截器
- 下一篇: .net core 注入中的三种模式:S