• 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;
        }
    
    }
  • 相关阅读:
    C++范围解析运算符::的使用
    C程序的内存布局
    ARM中LDR伪指令与LDR加载指令
    每天一个linux命令(12):more命令
    C++ explicit关键字
    C++内联函数详解
    C++友元详解
    C++ new操作符详解
    CDN技术详解笔记
    字符串匹配(KMP 算法 含代码)
  • 原文地址:https://www.cnblogs.com/xtdxs/p/7097443.html
Copyright © 2020-2023  润新知