zoukankan      html  css  js  c++  java
  • 文件上传(多文件上传)/下载

    通常我们会涉及到上传文件和下载文件,在没接struts2框架之前,我们都是使用apache下面的commons子项目的FileUpload组件来进行文件的上传,但是那样做的话,代码看起来比较繁琐,而且不灵活,在学习了struts2后,struts2为文件上传下载提供了更好的实现机制,在这里我分别就文件下载和多文件上传的源代码进行一下讲

    文件上传

    首先先创建jsp页面(用于多文件上传)

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
        String path = request.getContextPath();
        String basePath = request.getScheme() + "://"
                + request.getServerName() + ":" + request.getServerPort()
                + path + "/";
    %>
    <%@ taglib uri="/struts-tags" prefix="s"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <base href="<%=basePath%>">
    
    <title>登录页面</title>
    
    </head>
    
    <body>
    
        <s:form action="upload.action" enctype="multipart/form-data" method="post">
            
            <s:file name="upload" label="选择文件" />
            <br />
            <s:file name="upload" label="选择文件" />
            <br />
            <s:file name="upload" label="选择文件" />
            <br />
            <s:submit name="submit" value="上传文件"></s:submit>
        </s:form>
    
    </body>
    </html>

    success.jsp页面(用来显示上传成功后的文件和文件类型)

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
        String path = request.getContextPath();
        String basePath = request.getScheme() + "://"
                + request.getServerName() + ":" + request.getServerPort()
                + path + "/";
    %>
    <%@ taglib uri="/struts-tags" prefix="s"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <base href="<%=basePath%>">
    
    <title>成功页面</title>
    
    </head>
    
    <body>
        您所上传的文件是:<s:property value="uploadFileName"/><br/>
        文件类型:<s:property value="uploadCOntentType"/>
    
    
    </body>
    </html>

    接下来创建UploadAction类

    package cn.happy.action;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileOutputStream;
    
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionContext;
    import com.opensymphony.xwork2.ActionSupport;
    
    public class UploadAction extends ActionSupport {
    
    
        // 上传文件的属性
        private File[] upload;
        // 上传文件的类型
        private String[] uploadContentType;
        // 上传文件的名称
        private String[] uploadFileName;
        // 上传文件的地址
        private String savePath;
        
        @Override
        public String execute() throws Exception {
            byte[] buffer=new byte[1024];
            for (int i = 0; i < upload.length; i++) {
                
                //建立上传文件的输入流
                FileInputStream fis=new FileInputStream(getUpload()[i]);
                //建立上传文件的输出流, getImageFileName()[i]
                FileOutputStream fos=new FileOutputStream(getSavePath()+"\"+getUploadFileName()[i]);
                int length=fis.read(buffer);
                while(length>0){
                    fos.write(buffer,0,length);
                    length = fis.read(buffer);
                    
                }
                fis.close();
                fos.flush();
                fos.close();
            }
            return SUCCESS;
        }
        
        
        
        public String getSavePath() {
            return ServletActionContext.getServletContext().getRealPath(savePath);
        }
        public void setSavePath(String savePath) {
            this.savePath = savePath;
        }
        
        public File[] getUpload() {
            return upload;
        }
        public void setUpload(File[] upload) {
            this.upload = upload;
        }
        public String[] getUploadContentType() {
            return uploadContentType;
        }
        public void setUploadContentType(String[] uploadContentType) {
            this.uploadContentType = uploadContentType;
        }
        public String[] getUploadFileName() {
            return uploadFileName;
        }
        public void setUploadFileName(String[] uploadFileName) {
            this.uploadFileName = uploadFileName;
        }
        
        
        
        
        
    
    }

    最后编写配置文件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.devMode" value="false" />
        
        
        <package name="default" namespace="/" extends="struts-default">
            
            <action name="upload" class="cn.happy.action.UploadAction" method="execute">
                <param name="savePath">/image</param>
               <result name="success">/upload/success.jsp</result>
            </action>
        </package>
    </struts>

    实现效果展示

    选择文件后

    文件下载

     编写jsp页面

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
    <%
    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>My JSP 'index.jsp' starting page</title>
      </head>
      
      <body>
       <a href="download.action?fileName=1.jpg">点击此处下载文档</a>
      </body>
    </html>

    创建FileDownAction类

    package action;
    
    import java.io.BufferedInputStream;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    
    import org.apache.struts2.ServletActionContext;
    
    import com.opensymphony.xwork2.ActionSupport;
    
    public class FileDownAction extends ActionSupport {
        //读取下载文件的目录
        private String inputPath;
        //下载的文件名
        private String FileName;
        //读取下载文件的输入流
        private InputStream inputStream;
        //下载文件的类型
        private String conetntType;
        
        //创建InputStream输入流
        public InputStream getInputStream() throws IOException {
            System.out.println("123");
            String path=ServletActionContext.getServletContext().getRealPath(inputPath);
            return new BufferedInputStream(new FileInputStream(path+"\"+FileName));
        }
        
        @Override
        public String execute() throws Exception{
            return SUCCESS;
        }
        
        
        public String getInputPath() {
            return inputPath;
        }
        public String getFileName() {
            return FileName;
        }
        public String getConetntType() {
            return conetntType;
        }
        public void setInputPath(String inputPath) {
            this.inputPath = inputPath;
        }
        public void setFileName(String fileName) {
            FileName = fileName;
        }
        public void setInputStream(InputStream inputStream) {
            this.inputStream = inputStream;
        }
        public void setConetntType(String conetntType) {
            this.conetntType = conetntType;
        }
    }

    编写配置文件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.devMode" value="true"></constant>
             <package name="default" namespace="/" extends="struts-default"> 
                <action name="download" class="action.FileDownAction">
                    <param name="inputPath">/image</param>
                    <result name="success" type="stream">
                    <param name="contentType">application/octet-stream</param>
                    <param name="inputName">inputStream</param>
                    <param name="contentDisposition">attachment;Filename="${FileName}"</param>
                    <param name="bufferSize">4096</param>
                    </result>
                </action>
             </package> 
        
        
    </struts>

     最后在webRoot目录下创建image文件里面保存下载用到的文件

    实现效果

    点击文件下载

    附加

    导入jar包

    web.xml配置

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      <display-name></display-name>    
      
       <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
      </filter>
      <filter-mapping>
       <filter-name>struts2</filter-name>
       <url-pattern>/*</url-pattern>  
      </filter-mapping>
      
      
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>
  • 相关阅读:
    [转]好习惯养成的10个步骤
    模拟资料
    [转]暗时间
    [转]30个小改变,造就你的卓越人生
    [转]Word 2007文档中图片不显示或对象不显示的解决方法
    ubuntu 10.04 安转2.6.38内核
    [转]可以让你少奋斗10年的工作经验
    [转]Vim 复制粘帖格式错乱问题的解决办法
    C# 获取类中所有的属性
    sql 脚本
  • 原文地址:https://www.cnblogs.com/baixingqiang/p/5945329.html
Copyright © 2011-2022 走看看