zoukankan      html  css  js  c++  java
  • Struts2.0实现的文件上传(单附件和多附件)以及附件下载功能

      --------------------------------------------------单附件上传:----------------------------------------------------------------

    Action类:

    package com.yourcompany.struts.uponloadfile;
    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;
     import java.util.Date;

     import org.apache.struts2.ServletActionContext;

     import com.opensymphony.xwork2.ActionSupport;

     public class FileUploadAction extends ActionSupport  {
         private static final long serialVersionUID = 572146812454l ;
         private static final int BUFFER_SIZE = 16 * 1024 ;
        
         private File myFile;
         private String contentType;
         private String fileName;
         private String imageFileName;
         private String caption;
        
         public void setMyFileContentType(String contentType)  {
             this .contentType = contentType;
        } 
         //还有myFileContentType(上传文件的MIME类型)和myFileFileName(上传文件的文件名,该文件名不包括文件的路径)。因此,<s:file name="xxx" />
         //对应Action类里面的xxx、xxxContentType和xxxFileName三个属性。
         public void setMyFileFileName(String fileName)  {
             this .fileName = fileName;
        } 
            
         public void setMyFile(File myFile)  {
             this .myFile = myFile;
        } 
        
         public String getImageFileName()  {
             return imageFileName;
        } 
        
         public String getCaption()  {
             return caption;
        } 
     
          public void setCaption(String caption)  {
             this .caption = caption;
        } 
        
         private static void copy(File src, File dst)  {
             try  {
                InputStream in = null ;
                OutputStream out = null ;
                 try  {    
                  //输入到缓冲流
                    in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE);
                    out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE);
                     byte [] buffer = new byte [BUFFER_SIZE];
                     while (in.read(buffer) > 0 )  {
                        out.write(buffer);
                    } 
                 } finally  {
                     if ( null != in)  {
                        in.close();
                    } 
                      if ( null != out)  {
                        out.close();
                    } 
                } 
             } catch (Exception e)  {
                e.printStackTrace();
            } 
        } 
        
         private static String getExtention(String fileName)  {
             int pos = fileName.lastIndexOf( "." );
             return fileName.substring(pos+1);//获得后缀名
        } 
     
        @Override
         public String execute()      {        
            imageFileName = new Date().getTime() + getExtention(fileName);//合成图片的名称
            System.out.println("================="+imageFileName+"========="+ServletActionContext.getServletContext().getRealPath("WebRoot/UploadImages" ));
            File imageFile = new File(ServletActionContext.getServletContext().getRealPath( "/UploadImages") + "/" +imageFileName);
            copy(myFile, imageFile);
             return SUCCESS;
        }
    }

    struts.xml配置:

    <action name ="fileUpload" class ="com.yourcompany.struts.uponloadfile.FileUploadAction" > 
                
                  <interceptor-ref name ="fileUpload" > 
                    <param name ="allowedTypes" > 
                       image/bmp,image/png,image/gif,image/jpeg
                    </param > 
                </interceptor-ref >  
                <!-- <interceptor-ref name="timer"/>  用于测试action的执行时间 -->
              
                <interceptor-ref name ="defaultStack" />    
                <result name="input">/uploadfile_index.jsp</result > 
                <result name="success">/uploadfile_result.jsp </result > 
            </action >

    uploadfile_index.jsp:

    jsp:

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
    <%@ taglib uri="/struts-tags" prefix="s" %>


    <%   
    String path = request.getContextPath();   
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";   
    %> 

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
    <html>  
      <head>  
        <base href="<%=basePath%>">  
           
        <title>uploadfile_index.jsp</title>  
           
        <meta http-equiv="pragma" content="no-cache">  
        <meta http-equiv="cache-control" content="no-cache">  
        <meta http-equiv="exires" content="0">       
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
        <meta http-equiv="description" content="This is my page">  
        <!--  
        <link rel="stylesheet" type="text/css" href="styles.css">  
        -->  
      
      </head>  
         
      <body>  
        选择上传文件:类型是图片
      <s:fielderror />
        <s:form action ="fileUpload" method ="POST" enctype ="multipart/form-data" > 
            <s:file name ="myFile"   label ="Image File" /> 
            <s:textfield name ="caption" label ="Caption" />        
            <s:submit /> 
        </s:form > 
     
      </body>  
    </html>

    uploadfile_result.jsp:

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
    <%@ taglib uri="/struts-tags" prefix="s" %>


    <%   
    String path = request.getContextPath();   
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";   
    %> 

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
    <html>  
      <head>  
        <base href="<%=basePath%>">  
           
        <title>uploadfile_result.jsp</title>  
           
        <meta http-equiv="pragma" content="no-cache">  
        <meta http-equiv="cache-control" content="no-cache">  
        <meta http-equiv="expires" content="0">       
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
        <meta http-equiv="description" content="This is my page">  
        <!--  
        <link rel="stylesheet" type="text/css" href="styles.css">  
        -->  
      
      </head>  
         
      <body>  
      <div style ="padding: 3px; border: solid 1px #cccccc; text-align: center" > 
            <img src ='UploadImages/<s:property value ="imageFileName" /> ' />
            <br /> 
            <s:property value ="caption" /> 
        </div >


      </body>  
    </html>

    --------------------------------------------------多附件上传:----------------------------------------------------------------

    Action类:

    package com.yourcompany.struts.uponloadfile;
    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;
    import java.util.ArrayList;
     import java.util.Date;
    import java.util.List;

     import org.apache.struts2.ServletActionContext;

    import com.opensymphony.xwork2.ActionSupport;

     public class maxFileUploadAction extends ActionSupport  {
         private static final long serialVersionUID = 572146812454l ;
         private static final int BUFFER_SIZE = 16 * 1024 ;
        
         private File[] uploads;
         private String[] uploadFileNames;
         private String[] uploadContentTypes;

         public File[] getUpload()  { return this .uploads; } 
          public void setUpload(File[] uploads)  { this .uploads = uploads; } 
     
          public String[] getUploadFileName()  { return this .uploadFileNames; } 
          public void setUploadFileName(String[] uploadFileName)  { this .uploadFileNames = uploadFileName; } 
     
          public String[] getUploadContentType()  { return this .uploadContentTypes; } 
          public void setUploadContentType(String[] uploadContentType)  { this .uploadContentTypes = uploadContentType;
          }
         private static void copy(File src, File dst)  {
             try  {
                InputStream in = null ;
                OutputStream out = null ;
                 try  {    
                  //输入到缓冲流
                    in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZE);
                    out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_SIZE);
                     byte [] buffer = new byte [BUFFER_SIZE];
                     while (in.read(buffer) > 0 )  {
                        out.write(buffer);
                    } 
                 } finally  {
                     if ( null != in)  {
                        in.close();
                    } 
                      if ( null != out)  {
                        out.close();
                    } 
                } 
             } catch (Exception e)  {
                e.printStackTrace();
            } 
        } 
        
         private static String getExtention(String fileName)  {
             int pos = fileName.lastIndexOf( "." );
             return fileName.substring(pos+1);//获得后缀名
        } 
     
        @Override
         public String execute(){     
         for(int i=0;i<3;i++){
           String imageFileName = new Date().getTime() +getExtention(uploadFileNames[i]);//合成图片的名称
            System.out.println("================="+imageFileName+"========="+ServletActionContext.getServletContext().getRealPath("WebRoot/UploadImages" ));
            File imageFile = new File(ServletActionContext.getServletContext().getRealPath( "/UploadImages") + "/" +imageFileName);
            copy(uploads[i], imageFile);
         }     
             return SUCCESS;
        }
    }

    struts.xml配置:

    <action name ="maxfileUpload" class ="com.yourcompany.struts.uponloadfile.maxFileUploadAction" > 
     <interceptor-ref name ="fileUpload" /> 
     <!--  <interceptor-ref name ="fileUploadStack" />  -->
      <interceptor-ref name ="defaultStack" />
     <result name="success">/uploadfile_maxresult.jsp </result >    
            </action >

    jsp:

    uploadfile_maxindex.jsp:

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
    <%@ taglib uri="/struts-tags" prefix="s" %>


    <%   
    String path = request.getContextPath();   
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";   
    %> 

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
    <html>  
      <head>  
        <base href="<%=basePath%>">  
           
        <title>uploadfile_maxindex.jsp</title>  
           
        <meta http-equiv="pragma" content="no-cache">  
        <meta http-equiv="cache-control" content="no-cache">  
        <meta http-equiv="exires" content="0">       
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
        <meta http-equiv="description" content="This is my page">  
        <!--  
        <link rel="stylesheet" type="text/css" href="styles.css">  
        -->  
      
      </head>  
         
      <body>  
      选择上传文件:不限类型
      <s:form action ="maxfileUpload" method ="POST" enctype ="multipart/form-data" > 
        <s:file label ="File (1)" name ="upload" /> 
        <s:file label ="File (2)" name ="upload" /> 
        <s:file label ="File (3)" name ="upload" /> 
        <s:submit /> 
    </s:form > 
     
      </body>  
    </html>

    uploadfile_maxresult.jsp

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
    <%@ taglib uri="/struts-tags" prefix="s" %>


    <%   
    String path = request.getContextPath();   
    String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";   
    %> 

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
    <html>  
      <head>  
        <base href="<%=basePath%>">  
           
        <title>uploadfile_maxresult.jsp</title>  
           
        <meta http-equiv="pragma" content="no-cache">  
        <meta http-equiv="cache-control" content="no-cache">  
        <meta http-equiv="exires" content="0">       
        <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
        <meta http-equiv="description" content="This is my page">  
        <!--  
        <link rel="stylesheet" type="text/css" href="styles.css">  
        -->  
      
      </head>  
         
      <body>  
     <h4>上传成功</h4>
     
      </body>  
    </html>

    --------------------------------------------------附件下载:----------------------------------------------------------------

    Action类:

    package com.yourcompany.struts.filedown;

    import java.io.InputStream;

    import java.io.UnsupportedEncodingException;

    import org.apache.struts2.ServletActionContext;

    import com.opensymphony.xwork2.Action;

    public class Filedown implements Action {

    private String fileName;// 初始的通过param指定的文件名属性

    private String inputPath;// 指定要被下载的文件路径


    public InputStream getInputStream() throws Exception {

    // 通过 ServletContext,也就是application 来读取数据

    return ServletActionContext.getServletContext().getResourceAsStream(inputPath);

    }

    public String execute() throws Exception {

    return SUCCESS;

    }

    public void setInputPath(String value) {

    inputPath = value;

    }

    public void setFileName(String fileName) {

    this.fileName = fileName;

    }

    /** 提供转换编码后的供下载用的文件名 */

    public String getDownloadFileName() {

    String downFileName = fileName;

    try {

    downFileName = new String(downFileName.getBytes(), "ISO8859-1");

    } catch (UnsupportedEncodingException e) {

    e.printStackTrace();

    }

    return downFileName;

    }

    }

    struts.xml配置:


    <!-- 下载现有文件 --> 
    <action name="download3" class="com.yourcompany.struts.filedown.Filedown"> 
    <param name="inputPath">/download/系统说明.doc</param> 
    <!-- 初始文件名 --> 
    <!-- 可以载页面传入 -->
    <!-- <param name="fileName">系统说明.doc</param> --> 
    <result name="success" type="stream"> 
    <param name="contentType">application/octet-stream;charset=ISO8859-1</param> 
    <param name="inputName">inputStream</param> 
    <!-- 使用经过转码的文件名作为下载文件名,downloadFileName属性 
    对应action类中的方法 getDownloadFileName() --> 
    <param name="contentDisposition">attachment;filename="${downloadFileName}"</param> 
    <param name="bufferSize">4096</param> 
    </result> 
    </action>

    JSP:

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
    <%@ taglib prefix="s" uri="/struts-tags" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html>
    <head>
        <title>filedown.jsp</title>
       
    </head>
    <body>   

    <a href=" <s:url value="download3.action"> <s:param name="fileName">系统说明.doc</s:param> </s:url>">download</a>

    </body>
    </html>

  • 相关阅读:
    http uri唯一标识
    http协议
    python模块 sys
    file 文件的操作
    库的介绍及使用
    python os模块
    python的序列化与反序列化
    python 字典的定义以及方法
    python字符串的常用方法
    在Windows下使用adb logcat grep
  • 原文地址:https://www.cnblogs.com/toge/p/6114696.html
Copyright © 2011-2022 走看看