在java中上传文件似乎总有点麻烦,没.net那么简单,记得最开始的时候用smartUpload实现文件上传,最近在工作中使用spring的MultipartFile实现文件上传,感觉挺简单,在这里和大家分享一下.
一.主要有两个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模式,大家应该都很熟悉了
< 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 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页面
< 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 >ok,现在就可以上传文件了,挺简单吧?这里我只列出了基本步骤,至于具体的操作(比如中文问题)可能就需要大家自己再完善完善了.