利用MultipartFile实现文件上传
在java中上传文件似乎总有点麻烦,没.net那么简单,记得最开始的时候用smartUpload实现文件上传,最近在工作中使用spring的MultipartFile实现文件上传,感觉挺简单,在这里和大家分享一下.
一.主要有两个java类,和一般的servlet放在一起即可.
1.FileUploadBean.java
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
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模式,大家应该都很熟悉了
xml 代码
- <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,这里要配置映射,并可以设定最大可上传文件的大小
xml 代码
- <?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 用来标识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"/>
- <!-- 上传失败时跳转页面 -->
- <property name="formView" value="/user/err.jsp"/>
- <!-- 上传成功时跳转页面 -->
- <property name="successView" value="/user/confirmation.jsp"/>
- </bean>
- </beans>
三.设定jsp页面
ok,现在就可以上传文件了,挺简单吧?这里我只列出了基本步骤,至于具体的操作(比如中文问题)可能就需要大家自己再完善完善了.xml 代码
- <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="确认上传"></td>
- </tr>
- </form>