第一步:首先建個上傳檔案的簡單的介面,代碼如下:檔案名稱(FileUpload.jsp)
<%@ page language="java" contentType="text/html; charset=UTF-8"%><br /><html><br /><head><br /><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><br /><title>檔案上傳</title><br /><mce:script type="text/javascript"><!--<br />function apply(){<br />var f=document.getElementById("form1");<br />var file=document.getElementById("file");<br />if(file.value!=''){<br />f.submit();<br />}else{<br />alert('請選擇要上傳的檔案');<br />return false;<br />}</p><p>}<br />// --></mce:script><br /></head><br /><body><br /><form id="form1" action="/FileUpload.do" method="post" enctype="multipart/form-data"><br /> <table align="center"><br /> <tr><td><br /><input type="file" id="uploadFile" name="uploadFile" size="12" value=" "> <p> </td><br /></tr><br /><tr><td><br /><input onclick="apply();return false;" type="submit" value="上傳檔案"></td><br /> </tr><br /> </table><br /></form><br /></body><br /></html>
第二步:建立一個ActionForm,代碼如下:檔案名稱(FileUploadForm.java)
package com.form;<br />import org.apache.struts.action.ActionForm;<br />import org.apache.struts.upload.FormFile;<br />public class FileUploadForm extends ActionForm {<br />private FormFile uploadFile;<br />public FormFile getUploadFile() {<br />return uploadFile;<br />}<br />public void setUploadFile(FormFile uploadFile) {<br />this.uploadFile = uploadFile;<br />}<br />}<br />
第三步:建立Action,代碼如下,檔案名稱(FileUploadAction)
package com.action;<br />import java.io.FileNotFoundException;<br />import java.io.FileOutputStream;<br />import java.io.IOException;<br />import java.io.InputStream;<br />import java.io.OutputStream;<br />import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;<br />import org.apache.struts.action.Action;<br />import org.apache.struts.action.ActionForm;<br />import org.apache.struts.action.ActionForward;<br />import org.apache.struts.action.ActionMapping;<br />import org.apache.struts.upload.FormFile;<br />import com.form.FileUploadForm;<br />public class FileUploadAction extends Action {<br />public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {<br />FileUploadForm uploadForm=(FileUploadForm) form;<br />FormFile uploadFile=uploadForm.getUploadFile();<br />//得到檔案的名字<br />String fileName=uploadFile.getFileName();<br />//得到檔案的大小<br />int fileSize=uploadFile.getFileSize();<br />//得到檔案的輸入資料流<br />InputStream is=uploadFile.getInputStream();<br />uploadFile(fileName,is);<br />return mapping.findForward("index");<br />}<br />/**<br /> * 上傳檔案<br /> * @param fileName<br /> * @param is<br /> */<br />private void uploadFile(String fileName, InputStream is) {</p><p>try {<br /> //設定上傳檔案要儲存的路徑<br />OutputStream os=new FileOutputStream("E:/save/"+fileName);<br />//設定一個Buffer用來快取資料<br />byte[] buffer=new byte[1024*1024];<br />int len;<br />while((len=is.read(buffer))!=-1){<br />//將緩衝的資料寫到磁碟<br />os.write(buffer,0,len);<br />}<br />//關閉流<br />os.close();<br />is.close();<br />} catch (FileNotFoundException e) {<br />e.printStackTrace();<br />} catch (IOException e) {<br />e.printStackTrace();<br />}<br />}<br />}<br />
第四步:寫strust的設定檔struts-config.xml,代碼如下:
<?xml version="1.0" encoding="ISO-8859-1" ?><br /><!DOCTYPE struts-config PUBLIC<br /> "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"<br /> "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"><br /><struts-config><br /> <form-beans><br /> <form-bean name="upload" type="com.form.FileUploadForm" /><br /> </form-beans><br /><action-mappings><br /> <action path="/FileUpload" type="com.action.FileUploadAction" name="upload" /><br /> </action-mappings><br /><controller processorClass="org.apache.struts.tiles.TilesRequestProcessor"/><br /> <message-resources parameter="resources.application" />
經過以上四步,開始運行,要是上傳的檔案名稱是中文會報異常的,為此加上過濾器。
第五步:加上過濾器:代碼如下:
在web.xml中加上下面的代碼
<filter><br /> <filter-name>GlobalFilter</filter-name><br /> <filter-class>com.filter.GlobalFilter</filter-class><br /> </filter><br /> <filter-mapping><br /> <filter-name>GlobalFilter</filter-name><br /> <url-pattern>/*</url-pattern><br /> </filter-mapping>
com.filter.GlobalFilter代碼如下:
package com.filter;<br />import java.io.IOException;<br />import javax.servlet.Filter;<br />import javax.servlet.FilterChain;<br />import javax.servlet.FilterConfig;<br />import javax.servlet.ServletException;<br />import javax.servlet.ServletRequest;<br />import javax.servlet.ServletResponse;<br />public class GlobalFilter implements Filter{</p><p>public void init(FilterConfig filterConfig) throws ServletException{<br />System.out.println("===========in the filter==========");<br />}<br />public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain) throws IOException,ServletException{<br />try{<br />request.setCharacterEncoding("UTF-8");<br />chain.doFilter(request,response);<br />}catch(Exception e){<br />e.printStackTrace();<br />}<br />}<br />public void destroy() {<br />}<br />}<br />
經過以上的五步,檔案的上傳功能就實現了。