利用MultipartFile实现文件上传
生活随笔
收集整理的這篇文章主要介紹了
利用MultipartFile实现文件上传
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
利用MultipartFile實現(xiàn)文件上傳
???????? 在java中上傳文件似乎總有點麻煩,沒.net那么簡單,記得最開始的時候用smartUpload實現(xiàn)文件上傳,最近在工作中使用spring的MultipartFile實現(xiàn)文件上傳,感覺挺簡單,在這里和大家分享一下.
一.主要有兩個java類,和一般的servlet放在一起即可.
1.FileUploadBean.java
package?chb.demo.web;import?org.springframework.web.multipart.MultipartFile;
/**?*//**
?*?@author?chb
?*
?*/
public?class?FileUploadBean?...{
????private?MultipartFile?file;
????public?void?setFile(MultipartFile?file)?...{
????????this.file?=?file;
????}
????public?MultipartFile?getFile()?...{
????????return?file;
????}
}
2.FileUploadController.java
package?chb.demo.web;import?java.io.FileOutputStream;
import?java.io.IOException;
import?java.io.InputStream;
import?javax.servlet.http.HttpServletRequest;
import?javax.servlet.http.HttpServletResponse;
import?org.springframework.validation.BindException;
import?org.springframework.web.multipart.MultipartFile;
import?org.springframework.web.servlet.ModelAndView;
import?org.springframework.web.servlet.mvc.SimpleFormController;
/**?*//**
?*?@author?chb
?*
?*/
public?class?FileUploadController?extends?SimpleFormController?...{
????????
????protected?ModelAndView?onSubmit(
????????HttpServletRequest?request,
????????HttpServletResponse?response,
????????Object?command,
????????BindException?errors)...{
????????
????????try
????????...{
????????????//?cast?the?bean
????????????FileUploadBean?bean?=?(FileUploadBean)?command;
????????????//?let's?see?if?there's?content?there
????????????MultipartFile?file?=?bean.getFile();
???????????????????????????????
????????????if?(file?==?null)?...{
????????????????throw?new?Exception("上傳失敗:文件為�空");????
????????????}
????????????if(file.getSize()>10000000)????????
????????????...{
????????????????throw?new?Exception("上傳失敗:文件大小不能超過10M");????????????
????????????}
????????????//得到文件�名
????????????String?filename=file.getOriginalFilename();????????
????????????
????????????if(file.getSize()>0)...{????????????????
????????????????try?...{
????????????????????SaveFileFromInputStream(file.getInputStream(),"D:/",filename);
????????????????}?catch?(IOException?e)?...{
????????????????????System.out.println(e.getMessage());
????????????????????return?null;
????????????????}
????????????}
????????????else...{
????????????????throw?new?Exception("上傳失敗:上傳文件不能為�空");
????????????}
????????????//?well,?let's?do?nothing?with?the?bean?for?now?and?return:
????????????try?...{
????????????????return?super.onSubmit(request,?response,?command,?errors);
????????????????
????????????}?catch?(Exception?e)?...{
????????????????System.out.println(e.getMessage());
????????????????return?null;
????????????}
????????}
????????catch(Exception?ex)
????????...{
????????????System.out.println(ex.getMessage());
????????????return?null;
????????}
????}???
????
????/**?*//**保存文件
?????*?@param?stream
?????*?@param?path
?????*?@param?filename
?????*?@throws?IOException
?????*/
????public?void?SaveFileFromInputStream(InputStream?stream,String?path,String?filename)?throws?IOException
????...{??????
????????FileOutputStream?fs=new?FileOutputStream(?path?+?"/"+?filename);
????????byte[]?buffer?=new?byte[1024*1024];
????????int?bytesum?=?0;
????????int?byteread?=?0;?
????????while?((byteread=stream.read(buffer))!=-1)
????????...{
???????????bytesum+=byteread;
???????????fs.write(buffer,0,byteread);
???????????fs.flush();
????????}?
????????fs.close();
????????stream.close();??????
????}???????
}
二.配置文件中如下配置:
1.web.xml,利用spring mvc模式,大家應(yīng)該都很熟悉了
????<servlet>????????<servlet-name>chb</servlet-name>
????????<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
????????<load-on-startup>1</load-on-startup>
????</servlet>
????<servlet-mapping>
????????<servlet-name>chb</servlet-name>
????????<url-pattern>*.do</url-pattern>
????</servlet-mapping>
2.chb-servlet.xml,這里要配置映射,并可以設(shè)定最大可上傳文件的大小
<?xml?version="1.0"?encoding="UTF-8"?><!DOCTYPE?beans?PUBLIC?"-//SPRING//DTD?BEAN//EN"?"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
????<!--?Multi-Action?用來標(biāo)識method的變量名定義-->
????<bean?id="methodNameResolver"?class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
????????<property?name="paramName">
????????????<value>action</value>
????????</property>
????????<property?name="defaultMethodName">
????????????<value>index</value>
????????</property>
????</bean>
????
????<bean?id="multipartResolver"??class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
????????<!--?one?of?the?properties?available;?the?maximum?file?size?in?bytes?-->
????????<property?name="maxUploadSize"?value="10000000"/>
????</bean>
????
????<bean?id="handlerMapping"?class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
????????<property?name="mappings">
??????????<props>
????????????<prop?key="/upload.do">fileUploadController</prop>
??????????</props>
????????</property>
????</bean>
????
????<bean?id="fileUploadController"?class="chb.demo.web.FileUploadController">
????????<property?name="commandClass"?value="chb.demo.web.FileUploadBean"/>
????????<!--?上傳失敗時跳轉(zhuǎn)頁面?-->
????????<property?name="formView"?value="/user/err.jsp"/>
????????<!--?上傳成功時跳轉(zhuǎn)頁面?-->
?????????<property?name="successView"?value="/user/confirmation.jsp"/>
???</bean>
</beans>
三.設(shè)定jsp頁面
?<form?id="form1"?method="post"?action="upload.do"?enctype="multipart/form-data">????????????????????<tr>
????????<td?width="25%"?align="right">上傳文件:</td>
????????<td><input?id="file"?type="file"?NAME="file"?style="width:300px;"></td>
????</tr>
????<tr?align="center"?valign="middle">
????????<td?height="60"?colspan="2"><input?type="submit"?ID="BtnOK"?value="確認(rèn)上傳"></td>
????</tr>
</form>????
????????? ok,現(xiàn)在就可以上傳文件了,挺簡單吧?這里我只列出了基本步驟,至于具體的操作(比如中文問題)可能就需要大家自己再完善完善了.
?
轉(zhuǎn)載于:https://www.cnblogs.com/hehe520/archive/2007/01/30/6330252.html
總結(jié)
以上是生活随笔為你收集整理的利用MultipartFile实现文件上传的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 南京流水账(一)
- 下一篇: 如何构建银行数据仓库