單文件上傳、多文件上傳和文件下載

單文件上傳: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;
    }
    
    
}
相關文章
相關標籤/搜索