JavaWeb之SpringMVC上傳檔案
根據之前所說,學習一款MVC框架,必須要知道檔案怎麼上傳的,那麼今天就來學習一下,SpringMVC是如何進行檔案上傳的,需要進行哪些配置,程式碼是如何編寫的。
首先是web.xml的配置
<?xml version="1.0" encoding="UTF-8"?>
<servlet>
<servlet-name>upload</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>upload</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!—加入過濾器就是為了上傳名字是中文的檔案時 上傳到伺服器上的檔名不會亂碼-->
<filter>
<filter-name>SpringCharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SpringCharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
SpringMVC的配置檔案upload-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<context:component-scan base-package="com.yf.upload"/>
<mvc:annotation-driven/>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!-- SpringMVC上傳檔案時,需配置MultipartResolver處理器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 指定所上傳檔案的總大小不能超過200KB。注意maxUploadSize屬性的限制不是針對單個檔案,而是所有檔案的容量之和 -->
<property name="maxUploadSize" value="200000"/>
</bean>
<!-- SpringMVC在超出上傳檔案限制時,會丟擲org.springframework.web.multipart.MaxUploadSizeExceededException -->
<!-- 該異常是SpringMVC在檢查上傳的檔案資訊時丟擲來的,而且此時還沒有進入到Controller方法中 -->
<bean id="exceptionResolver"class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<property name="exceptionMappings">
<props>
<!-- 遇到MaxUploadSizeExceededException異常時,自動跳轉到/WEB-INF/jsp/error_fileupload.jsp頁面 -->
<prop key="org.springframework.web.multipart.MaxUploadSizeExceededException">error_fileupload</prop>
</props>
</property>
</bean>
</beans>
用於上傳的表單頁面/WEB-INF/jsp/upload.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<form method="POST" enctype="multipart/form-data">
yourfile: <input type="file" name="myfiles"/><br/>
yourfile: <input type="file" name="myfiles"/><br/>
yourfile: <input type="file" name="myfiles"/><br/>
<input type="submit" value="上傳檔案"/>
</form>
上傳檔案過大時的頁面/WEB-INF/jsp/error_fileupload.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<h1>檔案過大,請重新選擇</h1>
最後是核心的UploadController.java
/**
* SpringMVC中的檔案上傳步驟:
* @第一步:由於SpringMVC使用的是commons-fileupload實現,故將其元件引入專案中,這裡用到的是commons-fileupload-1.2.2.jar和commons-io-2.0.1.jar
* @第二步:在####-servlet.xml中配置MultipartResolver處理器。可在此加入對上傳檔案的屬性進行限制
*@第三步:在Controller的方法中新增MultipartFile引數。該引數用於接收表單中file元件的內容
*@第四步:編寫前臺表單。注意enctype="multipart/form-data"以及<input type="file" name="**"/> name要和後臺接收引數時的名字相同
*/
@Controller
public class TestController
{
@RequestMapping(value="/uploadfile",method=RequestMethod.GET)
public String upLoadFile()
{
return "upload";
}
@RequestMapping(value="/uploadfile",method=RequestMethod.POST)
public String upLoadFile(@RequestParam MultipartFile[] myfiles, HttpServletRequest request) throws IOException
{
//如果只是上傳一個檔案,則只需要MultipartFile型別接收檔案即可,而且無需顯式指定@RequestParam註解
//如果想上傳多個檔案,那麼這裡就要用MultipartFile[]型別來接收檔案,並且還要指定@RequestParam註解
//並且上傳多個檔案時,前臺表單中的所有<input type="file"/>的name都應該是myfiles,否則引數裡的myfiles無法獲取到所有上傳的檔案
for(MultipartFile myfile : myfiles)
{
if(myfile.isEmpty())
{
System.out.println("檔案未上傳"); continue;
}
else
{
System.out.println("檔案長度: " + myfile.getSize());
System.out.println("檔案型別: " + myfile.getContentType());
System.out.println("檔名稱: " + myfile.getName());
System.out.println("檔案原名: " + myfile.getOriginalFilename());
System.out.println("===================");
//如果用的是Tomcat伺服器,則檔案會上傳到\%TOMCAT_HOME%webappsYourWebProjectWEB-INFupload資料夾中
String realPath = request.getSession().getServletContext().getRealPath("/WEB-INF/upload");
//這裡不必處理IO流關閉的問題,因為FileUtils.copyInputStreamToFile()方法內部會自動把用到的IO流關掉,我是看它的原始碼才知道的
FileUtils.copyInputStreamToFile(myfile.getInputStream(), new File(realPath + "/" +myfile.getOriginalFilename()));
}
}
return " success_fileupload ";
}
}
上傳檔案成功的頁面/WEB-INF/jsp/success_fileupload.jsp
<%@ page language="java" pageEncoding="UTF-8"%>
<h1>恭喜你,檔案上傳成功</h1>
相關文章
- SpringMVC之檔案上傳SpringMVC
- Java Web之SpringMVC 上傳檔案JavaWebSpringMVC
- SpringMvc檔案上傳SpringMVC
- javaWeb上傳檔案程式碼JavaWeb
- SpringMVC 單檔案上傳與多檔案上傳SpringMVC
- JavaWeb之實現檔案上傳與下載工具JavaWeb
- JavaWeb之實現檔案上傳與下載元件JavaWeb元件
- JavaWeb之實現檔案上傳與下載示例JavaWeb
- JavaWeb之實現檔案上傳與下載外掛JavaWeb
- JavaWeb之實現檔案上傳與下載原始碼JavaWeb原始碼
- JavaWeb之實現檔案上傳與下載例項JavaWeb
- springmvc實現檔案上傳SpringMVC
- JavaWeb之實現檔案上傳與下載控制元件JavaWeb控制元件
- SpringMVC檔案上傳下載(單檔案、多檔案)SpringMVC
- SpringMvc 檔案上傳注意事項SpringMVC
- 20160420javaweb之檔案上傳和下載JavaWeb
- SpringMVC多個檔案上傳實現SpringMVC
- day12-SpringMVC檔案上傳SpringMVC
- Ajax 之檔案上傳
- SpringMVC中的檔案上傳和下載SpringMVC
- SpringMVC實現多檔案上傳原始碼SpringMVC原始碼
- SpringMVC實現檔案上傳&下載(2)SpringMVC
- SpringMVC(四)-- springmvc的系統學習之檔案上傳、ajax&json處理SpringMVCJSON
- 小程式之檔案上傳
- Web安全之檔案上傳Web
- Express檔案上傳之MulterExpress
- php檔案上傳之多檔案上傳PHP
- SpringMvc本地上傳檔案SpringMVC
- SpringMVC檔案上傳與下載(附工程原始碼)SpringMVC原始碼
- SpringMVC(四)上傳檔案、json資料互動SpringMVCJSON
- SpringMVC【引數繫結、資料回顯、檔案上傳】SpringMVC
- springmvc + ajaxfileupload 實現非同步上傳檔案(圖片)SpringMVC非同步
- 單個檔案上傳和批量檔案上傳
- Web 安全漏洞之檔案上傳Web
- php圖片上傳之檔案安全PHP
- 檔案上傳
- SpringMVC 通過commons-fileupload實現檔案上傳SpringMVC
- SpringMVC中採用簡潔的配置實現檔案上傳SpringMVC