Struts2文件的上傳的與下載

首先要引入:commons-fileupload-xxx.jar和commons-io-xxx.jar兩個jar包

1.前臺index.jsp頁面:

<html>
  <head>
    <title>文件上傳與下載</title>
    <script type="text/javascript" src="/js/jquery-1.3.js"></script>
  </head>

  <body>
    <form action="upload.action" method="post" enctype="multipart/form-data">
        <input type="file" name="uploadFile.upload"/>
        <input type="submit" value="提交"/>
    </form><br>

    <a href="download.action?fileName=${message}">下載${message}</a>

  </body>
</html>

2.struts.xml配置文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>

    <package name="FileUpload" extends="json-default">
        <!-- 文件上傳 -->
        <action name="upload" class="com.fileupload.UploadAction">
            <result name="success">/index.jsp</result>
        </action>

        <!-- 文件下載 -->
        <action name="download" class="com.fileupload.DownLoadAction">
            <result name="succ" type="stream">
                <param name="contentType">application/octet-stream;charset=ISO8859-1</param>
                <param name="inputName">downloadFile</param>
                <param name="contentDisposition">attachment;filename=${fileName}</param>
                <param name="bufferSize">8192</param>
            </result>
        </action>
    </package>
</struts> 

3.上傳的action:

public class UploadAction extends ActionSupport {

    private UploadFile uploadFile;
    private FileUploadUtil fileUploadUtil =new FileUploadUtil();

    public String execute(){
        Map session=ActionContext.getContext().getSession();
        System.out.println("文件:"+uploadFile.getFile());
        System.out.println("文件名稱:"+uploadFile.getFileName());
        System.out.println("相應類型:"+uploadFile.getContentType());
        try {
//          String destPath = ServletActionContext.getServletContext().getRealPath("/uploads");    
//          File dest = new File(destPath, uploadFile.getFileName()); //服務器的文件    
//          FileUtils.copyFile(uploadFile.getFile(), dest);//完成了文件的拷貝工作 
            String fileName=fileUploadUtil.uploadFile(uploadFile);
            session.put("message",fileName);
        } catch (Exception e) {
            session.put("message","上傳失敗!");
            e.printStackTrace();
        }
        return "success";

    }

    public UploadFile getUploadFile() {
        return uploadFile;
    }

    public void setUploadFile(UploadFile uploadFile) {
        this.uploadFile = uploadFile;
    }   

}

4.下載的action:

public class DownLoadAction extends ActionSupport{

    private String basePath=ServletActionContext.getServletContext().getRealPath("/uploads/");
    private String fileName;

    public String execute(){
        return "succ";
    }

    public InputStream getDownloadFile(){
        return ServletActionContext.getServletContext().getResourceAsStream("/uploads/"+fileName);
    }

    public String getFileName() throws UnsupportedEncodingException{
        return new String(fileName.getBytes(),"ISO-8859-1");
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }


}

5.上傳文件的工具類FileUploadUtil:

public class FileUploadUtil {

    private String filePath;

    public void setFilePath(String filePath){
        this.filePath=filePath;
    }

    //1.通過文件獲取擴展名
    private String getFileExt(String fileName){
        return FilenameUtils.getExtension(fileName);
    }
    //2.生成UUID隨機數,作爲新的文件名
    private String newFileName(String fileName){
        String newName=UUID.randomUUID().toString() + "." +getFileExt(fileName);
        System.out.println("文件新名稱:"+newName);
        return newName;
    }
    //3.實現文件上傳的功能,返回上傳後新的文件名稱
    public String uploadFile(UploadFile uploadFile){
        //獲取新的文件名
        String newFileName=newFileName(uploadFile.getFileName());
        try {
            this.setFilePath(ServletActionContext.getServletContext().getRealPath("/uploads"));
            System.out.println("文件上傳的路徑:"+filePath);
            FileUtils.copyFile(uploadFile.getFile(), new File(filePath, newFileName));
            return newFileName;
        } catch (Exception e) {
            throw new RuntimeException();
        } finally{
            uploadFile.getFile().delete();
        }
    }
}

6.文件的實體類UploadFile:

public class UploadFile {

    private File file;

    private String contentType;

    private String fileName;

    public File getFile() {
        return file;
    }

    public String getContentType() {
        return contentType;
    }

    public String getFileName() {
        return fileName;
    }


    public void setUpload(File file) {
        this.file = file;
    }

    public void setUploadContentType(String contentType) {
        this.contentType = contentType;
    }

    public void setUploadFileName(String fileName) {
        this.fileName = fileName;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章