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


單文件上傳:

index頁面:

<%@ 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);
    }
}

 

 

多文件上傳:

和單文件上傳差不多只需要在index頁面多添加幾個文件上傳的標簽:

index頁面:

<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:

<!-- 多文件上傳 -->
    <action name ="uploads" class="action.UploadsAction">
        <!--通過param參數設置保存目錄的路徑 -->
        <param name="savePath">/image</param>
        <result name="success">/upload_success.jsp</result>
    </action>

 

對應的UploadsAction類:

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);
    }
}

 

文件下載:

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;
    }
    
    
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM