• 利用struts2进行单个文件,批量文件上传,ajax异步上传以及下载


    利用struts2进行单个文件,批量文件上传,ajax异步上传以及下载

    1.页面显示代码

    <%@ page language="java" import="java.util.*"  pageEncoding="UTF-8"%>
    <%
        String path = request.getContextPath();
        String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
    %>
    <!DOCTYPE >
    <html>
        <head>
                <script type="text/javascript" src="<%=path%>/jsAndCss/jquery-1.11.0.js" ></script>
                 <script type="text/javascript" src="<%=path%>/jsAndCss/util.js" ></script>
                 <script type="text/javascript" src="<%=path%>/jsAndCss/ajaxfileupload.js" ></script>
        </head>
        <body>
            <h1>文件表单上传</h1>
                <form  method = "post" action = "upload.action" enctype=multipart/form-data>
                     文件 : <input type ="file" name = "myFile">
                     <input type = "submit" value = "上传">        
                </form>
            <br><br>
            
            <h1>文件表单下载</h1>
                <form  method = "post" action = "download.action" enctype=multipart/form-data>
                     <input type = "submit" value = "下载">        
                </form>        
            <br><br>
                    
            <h1>文件ajax上传</h1>
              <form>
                 文件 : <input type ="file" name = "myFileAjax" id = "myFileAjax">
                 <input type = "button" value = "ajax上传" onclick = "updownMgr.upload();">        
              </form>
         
            <br><br>
         <h1>批量文件的上传</h1>
         <form  method = "post" action = "uploadBatch.action" enctype=multipart/form-data>
        <!--文件 1: <input type ="file" name = "myFile"><br><br>
             文件 2: <input type ="file" name = "myFile"><br><br>
             文件 3: <input type ="file" name = "myFile"><br><br>
             文件 4: <input type ="file" name = "myFile">
              -->
             <!--一次按住ctrl可提交多个文件  -->
             <input type="file" name="myFile" multiple="multiple">
               <input type = "submit" value = "提交"><br><br>    
         </form>
                 
        <script type="text/javascript">
            var updownMgr = {
                    upload:function(){
                        //$.AjaxFileUpload这里不要写成大写的A
                        $.ajaxFileUpload({
                            url:'uploadAjax.action',//用于文件上传的请求地址
                            fileElementId :'myFileAjax',//文件上传空间的id属性,通过这个id,相当于非异步中的myFile
                            dataType:'text',
                            success: function(data,status){
                                alert(data);
                            },
                            error: function(data,status,e){
                                alert(e+"===上传文件失败");
                            }
                        });
                    }
            };             
        </script>        
        </body>
    </html>

    二.代码

    1.UploadAction.java代码

    package org.scs.studystruts2.sysmanage.action;
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    public class UploadAction {
        //跟表单提交的input type = file 的name 保持一致
        private File myFile;
        
        //文件名称 (myFile+myFileFileName)固定格式
        private String myFileFileName;
        
        //文件类型 myFile+"ContentType"固定格式
        private String myFileContentType;
        
        //这是我们在action配置里面的参数allowTypes
        private String  allowTypes;
        
        private String message;
            
        public File getMyFile() {
            return myFile;
        }
        public void setMyFile(File myFile) {
            this.myFile = myFile;
        }
        
        public String getMyFileFileName() {
            return myFileFileName;
        }
        public void setMyFileFileName(String myFileFileName) {
            this.myFileFileName = myFileFileName;
        }
        public String getMyFileContentType() {
            return myFileContentType;
        }
        public void setMyFileContentType(String myFileContentType) {
            this.myFileContentType = myFileContentType;
        }
        public String getAllowTypes() {
            return allowTypes;
        }
        public void setAllowTypes(String allowTypes) {
            this.allowTypes = allowTypes;
        }
        public String getMessage() {
            return message;
        }
        public void setMessage(String message) {
            this.message = message;
        }
        
        //默认执行的方法 gotoLogin.action
        public String execute(){
            return "success";
        }    
        
        public String upload () throws Exception{
        //判断文件类型,如果使我们系统允许的文件类型,就进入上传流程,否则给出错误提示
        //在action配置了allowTypes参数来定义我们允许的上传类型
        boolean allowedFlag = false;
        String[] allowTypeArray = allowTypes.split(",");
        for(String fileTypes :allowTypeArray){
            if(fileTypes.equals(myFileContentType)){
                allowedFlag = true;
            }
        }
        if (allowedFlag) {
            String uploadRootPath = "D://yu//lou//chun";
            File file = new File(uploadRootPath);
            if (!file.exists()) {
                file.mkdirs();    
            }
            //第二步:我们是不是将我们的文件放入到inputStream里面去了,然后用outputstream写入到文件中
            InputStream is = null;
            OutputStream os = null;
            try {
                is =new BufferedInputStream(new FileInputStream(myFile));
                os = new BufferedOutputStream(new FileOutputStream(uploadRootPath+"//"+myFileFileName));
                byte[] buffer = new byte[1024];
                int len =0;
                while((len = is.read(buffer)) !=-1){
                    os.write(buffer, 0, len);
                }
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally {
                if (os!=null) {
                    os.flush();
                    os.close();
                }
                if (is!=null) {
                    is.close();
                }            
            }
        this.message = "文件上传成功";
        return "success";
        }else {
            this.message = "文件上传失败";
            return "fail";
        }
    
        }
    }

    2.UploadBatch.java

    和单个文件的差不多,只是把相应的改成数组,然后遍历一下

    package org.scs.studystruts2.sysmanage.action;
    import java.io.BufferedInputStream;
    import java.io.BufferedOutputStream;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    
    public class UploadBatchAction {
        //跟表单提交的input type = file 的name 保持一致
        private File[] myFile;
        
        //文件名称 (myFile+myFileFileName)固定格式
        private String[] myFileFileName;
        
        //文件类型 myFile+"ContentType"固定格式
        private String[] myFileContentType;
        
        private String message;
        
        
        public File[] getMyFile() {
            return myFile;
        }
    
        public void setMyFile(File[] myFile) {
            this.myFile = myFile;
        }
    
        public String[] getMyFileFileName() {
            return myFileFileName;
        }
    
        public void setMyFileFileName(String[] myFileFileName) {
            this.myFileFileName = myFileFileName;
        }
    
        public String[] getMyFileContentType() {
            return myFileContentType;
        }
    
        public void setMyFileContentType(String[] myFileContentType) {
            this.myFileContentType = myFileContentType;
        }
    
        public String getMessage() {
            return message;
        }
    
        public void setMessage(String message) {
            this.message = message;
        }
    
        
        public String uploadBatch () throws Exception{
            
            for (int i = 0; i < myFile.length; i++) {
                //第一步设置文件保存的位置
                String uploadRootPath = "D://yu//lou//chun";
                File file = new File(uploadRootPath);
                if (!file.exists()) {
                    file.mkdirs();    
                }
                //第二步:我们是不是将我们的文件放入到inputStream里面去了,然后用outputstream写入到文件中
                InputStream is = null;
                OutputStream os = null;
                try {
                    is =new BufferedInputStream(new FileInputStream(myFile[i]));
                    os = new BufferedOutputStream(new FileOutputStream(uploadRootPath+"//"+myFileFileName[i]));
                    byte[] buffer = new byte[1024];
                    int len =0;
                    while((len = is.read(buffer)) !=-1){
                        os.write(buffer, 0, len);
                    }
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }finally {
                    if (os!=null) {
                        os.flush();
                        os.close();
                    }
                    if (is!=null) {
                        is.close();
                    }            
                }
    
            
            }
            this.message = "文件上传成功";
            return "success";
        }
            
    }

    3.UploadAjax.java

    注意引入前端页面引入jquery-1.11.0.js ,  ajaxfileupload.js

      <head>
                <script type="text/javascript" src="<%=path%>/jsAndCss/jquery-1.11.0.js" ></script>
                 <script type="text/javascript" src="<%=path%>/jsAndCss/util.js" ></script>
                 <script type="text/javascript" src="<%=path%>/jsAndCss/ajaxfileupload.js" ></script>
       </head>
      1 package org.scs.studystruts2.sysmanage.action;
      2 import java.io.BufferedInputStream;
      3 import java.io.BufferedOutputStream;
      4 import java.io.File;
      5 import java.io.FileInputStream;
      6 import java.io.FileOutputStream;
      7 import java.io.InputStream;
      8 import java.io.OutputStream;
      9 import java.io.PrintWriter;
     10 
     11 import javax.servlet.http.HttpServletResponse;
     12 
     13 import org.apache.struts2.ServletActionContext;
     14 
     15 public class UploadAjaxAction {
     16     //跟表单提交的input type = file 的name 保持一致
     17     private File myFileAjax;
     18     
     19     //文件名称 (myFile+myFileFileName)固定格式
     20     private String myFileAjaxFileName;
     21     
     22     //文件类型 myFile+"ContentType"固定格式
     23     private String myFileAjaxContentType;
     24 
     25     private String message;
     26         
     27     
     28     public File getMyFileAjax() {
     29         return myFileAjax;
     30     }
     31 
     32     public void setMyFileAjax(File myFileAjax) {
     33         this.myFileAjax = myFileAjax;
     34     }
     35 
     36     public String getMyFileAjaxFileName() {
     37         return myFileAjaxFileName;
     38     }
     39 
     40     public void setMyFileAjaxFileName(String myFileAjaxFileName) {
     41         this.myFileAjaxFileName = myFileAjaxFileName;
     42     }
     43 
     44     public String getMyFileAjaxContentType() {
     45         return myFileAjaxContentType;
     46     }
     47 
     48     public void setMyFileAjaxContentType(String myFileAjaxContentType) {
     49         this.myFileAjaxContentType = myFileAjaxContentType;
     50     }
     51 
     52     public String getMessage() {
     53         return message;
     54     }
     55 
     56     public void setMessage(String message) {
     57         this.message = message;
     58     }
     59 
     60     public String uploadAjax() throws Exception{
     61          //第一步:首先我们需要确定上传过来的文件我们保存在哪里
     62         String uploadRootPath = "D://yu//lou//chun";
     63         File file = new File(uploadRootPath);
     64         if (!file.exists()) {
     65             file.mkdirs();    
     66         }
     67         //第二步:我们是不是将我们的文件放入到inputStream里面去了,然后用outputstream写入到文件中
     68         InputStream is = null;
     69         OutputStream os = null;
     70         try {
     71             is =new BufferedInputStream(new FileInputStream(myFileAjax));
     72             os = new BufferedOutputStream(new FileOutputStream(uploadRootPath+"//"+myFileAjaxFileName));
     73             byte[] buffer = new byte[1024];
     74             int len =0;
     75             while((len = is.read(buffer)) !=-1){
     76                 os.write(buffer, 0, len);
     77             }
     78         } catch (Exception e) {
     79             // TODO Auto-generated catch block
     80             e.printStackTrace();
     81         }finally {
     82             if (os!=null) {
     83                 os.flush();
     84                 os.close();
     85             }
     86             if (is!=null) {
     87                 is.close();
     88             }            
     89         }
     90     this.message = "文件上传成功";
     91     HttpServletResponse response = ServletActionContext.getResponse();
     92     response.setCharacterEncoding("UTF-8");
     93     response.setContentType("text/html;charset=UTF-8");
     94     PrintWriter out = response.getWriter();
     95     out.print(message);
     96     out.flush();
     97     out.close();
     98     return null;
     99     
    100     }
    101 }

    4.Download.java

     1 package org.scs.studystruts2.sysmanage.action;
     2 
     3 import java.io.FileInputStream;
     4 import java.io.FileNotFoundException;
     5 import java.io.InputStream;
     6 
     7 public class DownloadAction {
     8     
     9     public InputStream getDownloadFile() throws FileNotFoundException{
    10         return new FileInputStream("D://yu//lou//chun//detail.jpg");
    11     }
    12     public String download(){
    13         return "success";
    14     }
    15 }

    5.struts2.xml

     1 <?xml version="1.0" encoding="UTF-8" ?>
     2 <!DOCTYPE struts PUBLIC
     3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
     4     "http://struts.apache.org/dtds/struts-2.3.dtd">
     5 
     6 <struts>
     7     <package name="loginPackage" namespace="/" extends="struts-default">
     8     <action name="login" class="org.scs.studystruts2.sysmanage.action.LoginAction">
     9         <result name="success" type="dispatcher">/login_suc.jsp</result>
    10         <result name="fail" type="dispatcher">/login_err.jsp</result>
    11     </action>
    12     
    13     <action name="gotoUpload" class="org.scs.studystruts2.sysmanage.action.UploadAction">
    14         <result name="success" type="dispatcher">/WEB-INF/pages/upload/upload.jsp</result>
    15     </action>
    16     
    17     <action name="upload" class="org.scs.studystruts2.sysmanage.action.UploadAction" method="upload">
    18         <result name="success" type="dispatcher">/WEB-INF/pages/upload/upload_suc.jsp</result>
    19         <result name="fail" type="dispatcher">/WEB-INF/pages/upload/upload_err.jsp</result>
    20         <!--传递的allowTypes参数  -->
    21         <param name="allowTypes">image/jpeg,image/bmp,image/png,image/gif</param>
    22     </action>
    23     
    24     <action name="uploadAjax" class="org.scs.studystruts2.sysmanage.action.UploadAjaxAction" method="uploadAjax">        
    25     
    26     </action>
    27     
    28     <action name = "download" class = "org.scs.studystruts2.sysmanage.action.DownloadAction" method = "download">
    29         <result type="stream">
    30             <!--inline  -->
    31             <param name="contentDisposition">attachment;filename="321.jpg"</param>
    32             <param name="inputName">downloadFile</param>
    33         </result>         
    34     </action>
    35     
    36     <action name="uploadBatch" class="org.scs.studystruts2.sysmanage.action.UploadBatchAction" method="uploadBatch">
    37         <result name="success" type="dispatcher">/WEB-INF/pages/upload/upload_suc.jsp</result>
    38         <result name="fail" type="dispatcher">/WEB-INF/pages/upload/upload_err.jsp</result>
    39     </action>
    40     
    41     </package>
    42     <!--如果有类似的报错信息则需要加上这段代码,创建临时文件  -->
    43    <constant name="struts.multipart.saveDir" value="/tmp"/>
    44 </struts>
  • 相关阅读:
    iBatisnet 1.5版本的配置文件的几个变化
    使用Trace时要注意
    无刷新转页面?
    无刷新“页面跳转”问题一:与AtlasToolKit协同工作
    Assembly的Release与Debug
    iBatis.Net系列(四) iBatisNet API基础
    Atlas 调用web service
    无刷新“页面跳转”
    iBatis.Net系列(六) ResultMap
    在GridView中格式化时间字段
  • 原文地址:https://www.cnblogs.com/yulouchun/p/7526948.html
Copyright © 2020-2023  润新知