• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • stuts2關于文件的上傳和下載

    標簽: java  struts2

    struts2關于文件的上傳和下載

    1、 struts2關于文件的上傳

    1.1編寫UploadFile這個上傳類

    package model;
    import java.io.File;
    public class UploadFile {
        //定義要上傳的文件
        private File[] upload;
        //定義上傳文件的名字
        private String[] uploadFileName;
        //定義上傳文件的類型
        private String uploadContentType;
    
        public File[] getUpload() {
            return upload;
        }
    
        public void setUpload(File[] upload) {
            this.upload = upload;
        }
    
        public String[] getUploadFileName() {
            return uploadFileName;
        }
    
        public void setUploadFileName(String[] uploadFileName) {
            this.uploadFileName = uploadFileName;
        }
    
        public String getUploadContentType() {
            return uploadContentType;
        }
    
        public void setUploadContentType(String uploadContentType) {
            this.uploadContentType = uploadContentType;
        }
    }
    

    1.2編寫action

    package action;
    
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.ModelDriven;
    import model.UploadFile;
    
    import java.io.*;
    
    public class UploadAction extends ActionSupport implements ModelDriven<UploadFile> {
        private UploadFile upload=new UploadFile();
        @Override
        public UploadFile getModel() {
            return upload;
        }
        public String upload() {
            //這兒讀寫操作還可以用 FileUtils這個封裝類不過建議小白還是用原始的
            for (int i = 0; i <upload.getUpload().length; i++) {
                //設置上傳路徑(一定要設置對)
                String realPath="D:\\";
                realPath=realPath+"upload\\"+upload.getUploadFileName()[i];
                //設置高速緩沖輸入流
                BufferedInputStream bi=null;
                //設置高速緩沖輸出流
                BufferedOutputStream bo=null;
                try {
                    bi=new BufferedInputStream(new FileInputStream(upload.getUpload()[i]));
                    bo=new BufferedOutputStream(new FileOutputStream(realPath));
                    //設置判斷標志 初始化-1
                    int len=-1;
                    //設置字節數組用作存儲緩沖 打下設置為1MB
                    byte[] bytes = new byte[1024];
                    while ((len=bi.read(bytes))!=-1) {
                        //開始循環寫入
                        bo.write(bytes,0,len);
                    }
                } catch (FileNotFoundException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }finally {
                    //關閉輸入輸出流
                        try {
                            if (bi != null)
                            bi.close();
                            if (bo != null)
                                bo.close();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                }
            }
            return SUCCESS;
        }
    }
    

    1.3配置stuts.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
            "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
            "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
        <constant name="struts.devMode" value="true"/>
        <!--配置constant控制上傳大小-->
        <constant name="struts.multipart.maxSize" value="911"/>
        <package name="upload" extends="struts-default" namespace="/upload">
            <action name="upload" class="action.UploadAction" method="upload">
                <!--配置攔截器控制上傳類型-->
                <interceptor-ref name="defaultStack">
                    <param name="fileUpload.allowedExtensions">.mp3,.mp4,.flv,.jpg,.png,.gif</param>
                </interceptor-ref>
                <result name="success">/success.jsp</result>
                <!--如果發生錯誤回到原頁面-->
                <result name="input">/upload.jsp</result>
            </action>
        </package>
    </struts>
    

    1.4編寫jsp頁面

    1.4.1編寫success.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>成功頁面</title>
    </head>
    <body>
    恭喜你上傳成功
    </body>
    </html>
    
    

    1.4.2編寫upload.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@taglib prefix="s" uri="/struts-tags" %>
    <html>
    <head>
        <title>上傳頁面</title>
    </head>
    <body>
    <form action="${pageContext.request.contextPath}/upload/upload" method="post" enctype="multipart/form-data">
        文件1<input type="file" name="upload"><br><s:actionerror/>
        文件2<input type="file" name="upload"><br><s:actionerror/>
        文件3<input type="file" name="upload"><br><s:actionerror/>
        <input type="submit" value="提交">
    </form>
    </body>
    </html>
    
    

    至此struts做文件上傳工作完成
    不過
    不過上傳之后錯誤信息是英文的所以得做struts的國際化

    1.5建立msg_zh_CN.properties文件名字必須這么寫這是固定

    struts.messages.upload.error.SizeLimitExceededException=上傳的文件大小不得超過{0}
    

    1.6修改struts.xml目的是注冊剛才的配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
            "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
            "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
        <constant name="struts.devMode" value="true"/>
        <!--配置constant控制上傳大小-->
        <constant name="struts.multipart.maxSize" value="911"/>
          <!--注冊國際化文件msg_zh_CN.properties-->
        <constant name="struts.custom.i18n.resources" value="resource.msg"/>
        <package name="upload" extends="struts-default" namespace="/upload">
            <action name="upload" class="action.UploadAction" method="upload">
                <!--配置攔截器控制上傳類型-->
                <interceptor-ref name="defaultStack">
                    <param name="fileUpload.allowedExtensions">.mp3,.mp4,.flv,.jpg,.png,.gif</param>
                </interceptor-ref>
                <result name="success">/success.jsp</result>
                <!--如果發生錯誤回到原頁面-->
                <result name="input">/upload.jsp</result>
            </action>
        </package>
    </struts>
    

    至此strtus2上傳多文件工作完成,有什么問題歡迎大家留言評論

    2.struts關于文件的下載有下載列表的

    2.1 action類的編寫,編寫文件下載列表action

    package action;
    
    import org.apache.struts2.ServletActionContext;
    
    import javax.servlet.http.HttpServletRequest;
    import java.io.File;
    import java.util.ArrayList;
    import java.util.List;
    
    public class ListAction {
            public String list() {
                List<String> listString=new ArrayList<>();
                String realPath="D:\\upload";
                File file = new File(realPath);
                if (file.isDirectory()) {
                    File[] files = file.listFiles();
                    for (File file1 : files) {
                        String name = file1.getName();
                        listString.add(name);
                    }
                }
                HttpServletRequest request = ServletActionContext.getRequest();
                request.setAttribute("listString",listString);
                return "list";
            }
        }
    

    2.2編寫列表頁面,list.jsp

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <html>
    <head>
        <title>文件下載列表</title>
    </head>
    <body>
    <c:forEach items="${listString}" var="li">
        ${li}<a href="${pageContext.request.contextPath}/download/down.action?filename=${li}">下載</a><br>
    </c:forEach>
    </body>
    </html>
    

    2.3編寫下載action

    package action;
    
    import com.opensymphony.xwork2.ActionSupport;
    import org.apache.commons.io.FilenameUtils;
    import org.apache.struts2.ServletActionContext;
    
    import javax.servlet.http.HttpServletRequest;
    import java.io.*;
    import java.net.URLEncoder;
    
    public class DownloadAction extends ActionSupport{
        //定義文件下載輸入流
        private InputStream inputStream;
        //定義文件下載名字
        private String fileName;
        //定義下載文件的大小
        private int fileLength;
        public InputStream getInputStream() {
            return inputStream;
        }
        public void setInputStream(InputStream inputStream) {
            this.inputStream = inputStream;
        }
        public String getFileName() {
            return fileName;
        }
        public void setFileName(String fileName) {
            this.fileName = fileName;
        }
        public int getFileLength() {
            return fileLength;
        }
        public void setFileLength(int fileLength) {
            this.fileLength = fileLength;
        }
        public String down() {
            HttpServletRequest request = ServletActionContext.getRequest();
            String filename = request.getParameter("filename");
            String realPath = "D:\\upload\\";
            realPath=realPath+filename;
            try {
                inputStream=new FileInputStream(realPath);
                fileName= FilenameUtils.getName(realPath);
                fileName = URLEncoder.encode(fileName, "UTF-8");
                fileLength=inputStream.available();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return SUCCESS;
        }
    }
    

    2.4對配置文件struts.xml做修改

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
            "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
            "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
        <constant name="struts.devMode" value="true"/>
        <!--配置constant控制上傳大小-->
        <constant name="struts.multipart.maxSize" value="999999999"/>
        <constant name="struts.custom.i18n.resources" value="resource.msg"/>
        <constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
        <package name="upload" extends="struts-default" namespace="/upload">
            <action name="upload" class="action.UploadAction" method="upload">
                <!--配置攔截器控制上傳類型-->
                <interceptor-ref name="defaultStack">
                    <param name="fileUpload.allowedExtensions">.mp3,.mp4,.flv,.jpg,.png,.gif,.jpeg</param>
                </interceptor-ref>
                <result name="success">/success.jsp</result>
                <!--如果發生錯誤回到原頁面-->
                <result name="input">/upload.jsp</result>
            </action>
        </package>
        <package name="down" extends="struts-default" namespace="/download">
            <action name="down" class="action.DownloadAction" method="down">
                <result name="success" type="stream">
                    <param name="inputName">inputStream</param>
                    <param name="contentDisposition">attachment;filename=${fileName}</param>
                    <param name="contentType">application/octet-stream</param>
                    <param name="contentLength">${fileLength}</param>
                </result>
            </action>
        </package>
        <package name="practise" extends="struts-default">
            <action name="list" class="action.ListAction" method="list">
                <result name="list" type="dispatcher">/list.jsp</result>
            </action>
        </package>
    </struts>
    

    注:對后臺數據的封裝最好采用contexmap 前臺接收struts2采用ognl表達式更好,但是筆者水平有限只用了request自帶設置屬性的方法和jstl表達式。
    至此struts2關于文件上傳和下載的應用到此完畢,歡迎指正。

    版權聲明:本文為weixin_43216437原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/weixin_43216437/article/details/104208880

    智能推薦

    文件的上傳和下載

    文件的上傳和下載 文件的上傳和下載,是非常常見的功能。很多的系統中,或者軟件中都經常使用文件的上傳和下載。 比如:QQ 頭像,就使用了上傳。 郵箱中也有附件的上傳和下載功能。 OA 系統中審批有附件材料的上傳。 1 文件的上傳介紹 要有一個 form 標簽,method=post 請求 form 標簽的 encType 屬性值必須為 multipart/form-data 值 在 form 標簽中...

    文件的上傳和下載

    文件的上傳和下載 這個星期學習了蠻多東西,我準備吧簡單寫一個文件的上傳和下載....

    文件的上傳和下載

    文件的上傳和下載 文件的上傳和下載是信息化系統,以及網絡程序上非常常見的功能。 比如: QQ中就有上傳頭像 郵箱里附件可以用于下載。 1、文件的上傳介紹(*****重點) 要有一個form表單,并且method是post請求 一定要有input type=file 文件上傳域 form表單編碼方式必須是:multipart/form-data 有服務器程序servlet接收請求,并保存文件 1.1...

    文件的上傳和下載

    ftp 文件服務器 【1】 分為服務端和客戶端,要求可以有多個客戶端同時操作。 【2】 客戶端可以查看服務器文件庫中有什么文件。 【3】 客戶端可以從文件庫中下載文件到本地。 【4】 客戶端可以上傳一個本地文件到文件庫。 【5】 使用print在客戶端打印命令輸入提示,引導操作 FTP --> 服務端 盡量使用進程完成無阻塞的并發行為 不使用c作為解釋器 (Java C#) Guido的聲明...

    文件上傳和下載

    在Web應用系統開發中,文件上傳和下載功能是非常常用的功能,今天來講一下JavaWeb中的文件上傳和下載功能的實現。    對于文件上傳,瀏覽器在上傳的過程中是將文件以流的形式提交到服務器端的,如果直接使用Servlet獲取上傳文件的輸入流然后再解析里面的請求參數是比較麻煩,所以一般選擇采用apache的開源工具common-fileupload這個文件上傳組件。這個common-fileuplo...

    猜你喜歡

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡