單文件上傳:html
index頁面:java
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <%@ taglib prefix="s" uri="/struts-tags" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>文件上傳</title> </head> <body> <!-- 上傳頁面的準備 --> <s:form action="upload.action" enctype="multipart/form-data" method="post"> <s:textfield name ="title" label ="標題"/><br/> <s:file name ="upload" label="選擇文件"/><br/> <s:submit name ="submit" value ="上傳文件"/> </s:form> </body> </html>
struts.xml配置相應的action:數組
<!-- 單文件上傳--> <action name="upload" class="action.UploadAction"> <param name="savePath">/image</param> <result name="success">/upload_success.jsp</result> </action>
對應的UploadAction類:緩存
public class UploadAction extends ActionSupport{ //封裝上傳文件的屬性 private File upload; //封裝上傳文件的類型 private String uploadContentType; //封裝上傳文件的名稱 private String uploadFileName; public File getUpload() { return upload; } public void setUpload(File upload) { this.upload = upload; } public String getUploadContentType() { return uploadContentType; } public void setUploadContentType(String uploadContentType) { this.uploadContentType = uploadContentType; } public String getUploadFileName() { return uploadFileName; } public void setUploadFileName(String uploadFileName) { this.uploadFileName = uploadFileName; } public void setSavePath(String savePath) { this.savePath = savePath; } //獲取文件上傳的路徑 private String savePath; @Override public String execute() throws Exception { //建立緩存數組 byte [] buffer =new byte[1024]; //讀取文件 FileInputStream fis =new FileInputStream(getUpload()); //保存文件,並設置保存目錄的路徑 FileOutputStream fos =new FileOutputStream(getSavePath()+"\\"+this.getUploadFileName()); int length =fis.read(buffer); while(length>0){ //每次寫入length長度的內容 fos.write(buffer,0,length); length=fis.read(buffer); } fis.close(); fos.flush(); fos.close(); return SUCCESS; } public String getSavePath(){ return ServletActionContext.getServletContext().getRealPath(savePath); } }
多文件上傳:app
和單文件上傳差很少只須要在index頁面多添加幾個文件上傳的標籤:jsp
index頁面:ide
<body> <!-- 上傳頁面的準備 --> <s:form action="uploads.action" enctype="multipart/form-data" method="post"> <s:textfield name ="title" label ="標題"/><br/> <s:file name ="uploads" label="選擇文件"/><br/> <s:file name ="uploads" label="選擇文件"/><br/> <s:file name ="uploads" label="選擇文件"/><br/> <s:submit name ="submit" value ="上傳文件"/> </s:form> </body>
struts.xml配置相應的action:post
<!-- 多文件上傳 --> <action name ="uploads" class="action.UploadsAction"> <!--經過param參數設置保存目錄的路徑 --> <param name="savePath">/image</param> <result name="success">/upload_success.jsp</result> </action>
對應的UploadsAction類:this
public class UploadsAction extends ActionSupport{ //封裝上傳文件的屬性 private File[] uploads; //封裝上傳文件的類型 private String[] uploadContentType; //封裝上傳文件的名稱 private String[] uploadFileName; public File[] getUploads() { return uploads; } public void setUploads(File[] uploads) { this.uploads = uploads; } public String[] getUploadContentType() { return uploadContentType; } public void setUploadContentType(String[] uploadContentType) { this.uploadContentType = uploadContentType; } public String[] getUploadFileName() { return uploadFileName; } public void setUploadFileName(String[] uploadFileName) { this.uploadFileName = uploadFileName; } //獲取文件上傳的路徑 private String savePath; @Override public String execute() throws Exception { //建立緩存數組 byte [] buffer =new byte[1024]; //讀取文件 for (int i = 0; i < uploads.length; i++) { FileInputStream fis =new FileInputStream(getUploads()[i]); //保存文件,並設置保存目錄的路徑 FileOutputStream fos =new FileOutputStream(getSavePath()+"\\"+this.getUploadFileName()[i]); int length =fis.read(buffer); while(length>0){ //每次寫入length長度的內容 fos.write(buffer,0,length); length=fis.read(buffer); } fis.close(); fos.flush(); fos.close(); } return SUCCESS; } public String getSavePath(){ return ServletActionContext.getServletContext().getRealPath(savePath); } }
文件下載:spa
index頁面:
<body> <a href="download.action?fileName=16.1.txt">點擊此處下載文檔</a> </body>
struts.xml配置相應的action:
<action name="download" class="action.FileDownAction"> <!--下載文件的路徑 --> <param name="inputPath">/image</param> <result name="success" type="stream"> <!--指定內容類型,下載的文件,可執行文件 --> <param name="contentType">application/octet-stream</param> <param name="inputName">inputStream</param> <param name="contentDisposition"> attachment;filename="${fileName}" </param> <!--讀取和下載文件時緩存區大小 --> <param name="bufferSize">4096</param> </result> </action>
對應的UploadsAction類:
public class FileDownAction extends ActionSupport { //讀取下載文件的目錄 private String inputPath; //下載文件的文件名 private String fileName; //讀取下載文件的輸入流 private InputStream inputStream; //下載文件的類型 private String contentType; public String getInputPath() { return inputPath; } public void setInputPath(String inputPath) { this.inputPath = inputPath; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } //文件下載的核心,獲取輸入流 public InputStream getInputStream() throws Exception { //獲取真實的路徑 String path =ServletActionContext.getServletContext().getRealPath(inputPath); return new BufferedInputStream(new FileInputStream(path+"\\"+fileName)); } public void setInputStream(InputStream inputStream) { this.inputStream = inputStream; } public String getContentType() { return contentType; } public void setContentType(String contentType) { this.contentType = contentType; } @Override public String execute() throws Exception { return SUCCESS; } }