今天幫師兄加了一個檔案上傳的功能,在網上找了找資料,struts1對檔案上傳支援的很好,用起來很方便,其中利用<html:file>可以很方便的上傳檔案
<html:file>的屬性為org.apache.struts.upload.FormFile,很方便獲得其輸入資料流,供新手參考~~
在jsp頁面中<html:form enctype="multipart/form-data" action="upload.do?command=upfile"> <html:file property="uploadfile"/> <html:submit value="上傳"/> </html:form> 在struts-config.xml中<action path="/upload" name="uploadForm" type="com.env.business.actions.UploadAction" parameter="command"/><form-bean name="uploadForm" type="com.env.business.forms.UploadForm"/>
在對應的Form中
package com.env.business.forms;import java.io.File;import org.apache.struts.action.ActionForm;import org.apache.struts.upload.FormFile;public class UploadForm extends ActionForm { public FormFile getUploadfile() { return uploadfile; } public void setUploadfile(FormFile uploadfile) { this.uploadfile = uploadfile; } private FormFile uploadfile;}
對應的Action類中
public class UploadAction extends DispatchAction { public ActionForward upfile(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception { response.setHeader("Pragma","No-cache"); response.setHeader("Cache-Control","no-cache"); response.setDateHeader("Expires", 0); UploadForm upForm = (UploadForm) form; PrintWriter out = null; try { response.setCharacterEncoding("GBK"); out = response.getWriter(); saveFile(upForm.getUploadfile()); // 將上傳檔案儲存到指寫的路徑(在web.xml中配置) out.println("上傳檔案成功."); } catch (Exception e) { System.out.println(e.getMessage()); return null; } return null; } /** * 向伺服器寫檔案 * @param formFile * @throws Exception */ protected void saveFile(FormFile formFile) throws Exception{ //路徑 String path="D:\\"; //得到輸入資料流 InputStream in = formFile.getInputStream(); //上傳 FileOutputStream fout = new FileOutputStream(path + formFile.getFileName()); byte buffer[] = new byte[8192]; int count = 0; while ((count = in.read(buffer)) > 0){ fout.write(buffer, 0, count); } fout.close(); //銷毀當前檔案 formFile.destroy(); } }
實現起來很方便,但是對大小以及斷點續傳功能沒有做實現~~