利用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("上傳失?。何募?#65533;空"); } 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("上傳失?。荷蟼魑募荒転?#65533;空"); } // 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 用來標識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="確認上傳"></td> </tr> </form>
ok,現(xiàn)在就可以上傳文件了,挺簡單吧?這里我只列出了基本步驟,至于具體的操作(比如中文問題)可能就需要大家自己再完善完善了.
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
java實現(xiàn)給出分數(shù)數(shù)組得到對應(yīng)名次數(shù)組的方法
這篇文章主要介紹了java實現(xiàn)給出分數(shù)數(shù)組得到對應(yīng)名次數(shù)組的方法,涉及java針對數(shù)組的遍歷、排序及運算的相關(guān)技巧,需要的朋友可以參考下2015-07-07Java并發(fā)編程之ReentrantLock實現(xiàn)原理及源碼剖析
ReentrantLock 是常用的鎖,相對于Synchronized ,lock鎖更人性化,閱讀性更強,文中將會詳細的說明,請君往下閱讀2021-09-09