利用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>

 

posted @ 2017-09-15 16:07  玉楼春秋  阅读(3235)  评论(0编辑  收藏  举报