基於struts 的FormFile實現檔案的上傳功能

來源:互聯網
上載者:User

 第一步:首先建個上傳檔案的簡單的介面,代碼如下:檔案名稱(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 />

經過以上的五步,檔案的上傳功能就實現了。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.