zoukankan      html  css  js  c++  java
  • struts2文件上传和下载

    1.创建一个index.jsp界面 和success.jsp上传成功界面

    index.jsp

    <%@ taglib prefix="s" uri="/struts-tags" %>  
      <body>
      
        <s:form action="files/add"  method="post" enctype="multipart/form-data">
            <s:file label="图片上传" name="upload"/>
             <s:submit value="提交"/>
        </s:form>

    success.jsp

      <body>
        文件操作成功!!
      </body>

    2.创建对应的struts.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    <struts>
    <!--设置文件上传的大小  -->
    <constant name="struts.multipart.maxSize" value="5000000000"></constant>
    <constant name="struts.devMode" value="true"/>
     <package name="default" namespace="/files" extends="struts-default">
     
     
      <action name="add" class="cn.bdqn.action.UploadAction" method="upload">
      <!-- 限制文件只能是图片
      <interceptor-ref name="fileUpload">
        <param name="allowedTypes">image/jpeg</param>
      </interceptor-ref>
      <interceptor-ref name="defaultStack"></interceptor-ref> -->
        <result>/success.jsp</result>
        <result  name="input">/index.jsp</result>
      </action>
     </package>
    </struts>

    3.创建对应的UploadAction

    属性名的规范  底层代码 FileUploadInterceptor中

     File[] files = multiWrapper.getFiles(inputName);
                        if (files != null && files.length > 0) {
                            List<File> acceptedFiles = new ArrayList<File>(files.length);
                            List<String> acceptedContentTypes = new ArrayList<String>(files.length);
                            List<String> acceptedFileNames = new ArrayList<String>(files.length);
                            String contentTypeName = inputName + "ContentType";
                            String fileNameName = inputName + "FileName";
    public class UploadAction extends ActionSupport {
       private  File upload;   //上传的文件  和前台file标签中的name属性 一致
       private  String uploadFileName;   //上传的文件名称   底层有规定,必须按照规范来
       private  String uploadContentType;   //上传的文件的类型
       
        
          //文件上传的方法
        public  String  upload(){
            System.out.println("进入了文件的上传......");
            //指定文件上传的路径
            String  path=ServletActionContext.getServletContext().getRealPath("/upload");
            //File.separatorChar  系统分隔符  区别linux和windows系统
            String pathName=path+File.separatorChar+uploadFileName;
            System.out.println("上传文件的全名称:"+pathName);
            try {
                FileUtils.copyFile(upload, new File(pathName));
            } catch (IOException e) {
                e.printStackTrace();
                return INPUT;
            }
            
            return  SUCCESS;
        }
    
    
        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;
        }
        
        
    }

     4.多文件上传 创建index2.jsp

    <%@ taglib prefix="s" uri="/struts-tags" %>  
      <body>
      
        <s:form action="files/adds"  method="post" enctype="multipart/form-data">
            <s:file label="图片上传" name="upload"/>
            <s:file label="图片上传" name="upload"/>
            <s:file label="图片上传" name="upload"/>
             <s:submit value="提交"/>
        </s:form>
      
      </body>

    5.在struts.xml文件中 新增

     <!-- 多个文件上传 -->
      <action name="adds" class="cn.bdqn.action.UploadAction2" method="upload">
        <result>/success.jsp</result>
        <result  name="input">/index2.jsp</result>
      </action>

    6.创建对应的UploadAction2

    public class UploadAction2 extends ActionSupport {
       private  File [] upload;   //上传的文件
       private  String [] uploadFileName;   //上传的文件名称
       private  String [] uploadContentType;   //上传的文件的类型
       
          //文件上传的方法
        public  String  upload(){
            System.out.println("进入了多文件的上传......");
             String path= ServletActionContext.getServletContext().getRealPath("/upload");
             String pathName="";
              //遍历 用户选择的文件
             for (int i = 0; i < upload.length; i++) {
                 pathName= path+File.separatorChar+uploadFileName[i];
                 try {
                     //把用户选择的文件复制到 指定的文件下
                    FileUtils.copyFile(upload[i], new  File(pathName));
                } catch (IOException e) {
                    e.printStackTrace();
                    return  INPUT;
                }
            }
             
            return  SUCCESS;
        }
    
    
        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;
        }
    
    
    }

     7.创建一个downLoad.jsp

    <%@ taglib prefix="s" uri="/struts-tags" %>  
      <body>
      
        <s:form action="files/downLoad"  method="post">
           <s:textfield label="下载的地址" name="downLoad"/>
             <s:submit value="下载"/>
        </s:form>
      
      </body>

    8.在struts.xml文件中新增

     <!-- 文件下载 -->
      <action name="downLoad" class="cn.bdqn.action.DownLoadAction" method="downLoad">
         <!-- result节点中 不需要返回界面    可以设置属性 -->
        <result type="stream">
        <!-- 文件下载到本地下载文件夹中   不写 默认 在界面中显示   源码得知 -->
          <param name="contentDisposition">attachment;filename=${fileName}</param>
        </result>
      </action>
    public class StreamResult extends StrutsResultSupport {
    
        private static final long serialVersionUID = -1468409635999059850L;
    
        protected static final Logger LOG = LoggerFactory.getLogger(StreamResult.class);
    
        public static final String DEFAULT_PARAM = "inputName";
    
        protected String contentType = "text/plain";
        protected String contentLength;
        protected String contentDisposition = "inline";
        protected String contentCharSet ;
        protected String inputName = "inputStream";

    9.创建对应的DownLoadAction

    public class DownLoadAction extends ActionSupport {
       private   InputStream inputStream;  //创建输入流对象
        private  String  fileName;   //下载文件的名称
        private  String  downLoad;  //和前台用户输入的name属性值 一致
        
        
        
        //文件下载
        public  String   downLoad(){
            try {
                inputStream=new FileInputStream(downLoad);
                // e:javacat.jpg   只需要文件名 
                int index=downLoad.lastIndexOf("\");
                fileName=downLoad.substring(index+1);
                //防止下载的中文乱码
                try {
                    fileName=URLEncoder.encode(fileName, "utf-8");
                } catch (UnsupportedEncodingException e) {
                    System.out.println("乱码问题");
                    e.printStackTrace();
                }
            } catch (FileNotFoundException e) {
                e.printStackTrace();
                return  INPUT;
            }
            
            
            return SUCCESS;
        }
        
       
        
        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 String getDownLoad() {
            return downLoad;
        }
        public void setDownLoad(String downLoad) {
            this.downLoad = downLoad;
        }
    
    }
  • 相关阅读:
    mysql之drop、truncate和delete的区别
    mysql之表结构,表空间,段,区,页,MVCC(待整理)
    mysql之子查询、视图、事务及pymysql等
    mysql之单表查询、多表查询
    解决跨域问题!
    项目--2
    项目--1
    后端接口书写
    VUE-组件
    VUE基本写法
  • 原文地址:https://www.cnblogs.com/999-/p/6037506.html
Copyright © 2011-2022 走看看