struts2中的文件上传下载

来源:互联网 发布:云计算三种模式 编辑:程序博客网 时间:2024/04/28 05:38

 以前自己学习上传下载代码,贴到网上便于查阅

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>
    <!-- 设置post请求参数的编码为utf-8 -->
    <constant name="struts.i18n.encoding" value="UTF-8" />
    <!-- action的后缀为action -->
    <constant name="struts.action.extension" value="action" />
    <!-- 让浏览器不缓存 -->
    <constant name="struts.serve.static.browserCache" value="false" />
    <!-- 是否对xml配置文件使用重新加载!如果对xml进行修改,不用重启tomcat-->
    <constant name="struts.configuration.xml.reload" value="true" />
    <!-- 是否打开开发者模式 -->
    <constant name="struts.devMode" value="false" />
    
    <package name="test" namespace="/" extends="struts-default">
        <action name="UploadAction" class="com.ll.action.UploadAction">
            <result name="input">/form.jsp</result>
            <!-- 自己来引入拦截器栈,那么默认的栈就不执行了 -->
            <interceptor-ref name="defaultStack">
                <!-- 为栈中名为fileUpload的拦截器指定名为allowedTypes这个参数指定值 -->
                <param name="fileUpload.allowedTypes">image/*</param>
            </interceptor-ref>
        </action>
        
        <action name="Download" class="com.ll.action.DownloadAction">
            <result type="stream">
                <param name="contentType">${type}</param><!-- ognl表达式,等同于调用Acton的getType()方法 -->
                <param name="contentDisposition">attachment;fileName=${showName}</param>
                <param name="inputName">inputStream</param>
            </result>
        </action>
    </package>

</struts>

上传

package com.ll.action;

import java.io.File;

import org.apache.commons.io.FileUtils;

import com.opensymphony.xwork2.ActionSupport;

public class UploadAction extends ActionSupport {
    private String username;// 用户名

    /*
     * 以下三个属性对应表单中的zhaoPian的文件表单项
     */
    private File zhaoPian;// 名称必须与表单项名称相同,文件的内容
    private String zhaoPianContentType;// 属性名称必须以表单项名称为前缀,文件的类型
    private String zhaoPianFileName;// 属性名称必须以表单项名称为前缀,文件的名称

    public void setUsername(String username) {
        this.username = username;
    }

    public void setZhaoPian(File zhaoPian) {
        this.zhaoPian = zhaoPian;
    }

    public void setZhaoPianContentType(String zhaoPianContentType) {
        this.zhaoPianContentType = zhaoPianContentType;
    }

    public void setZhaoPianFileName(String zhaoPianFileName) {
        this.zhaoPianFileName = zhaoPianFileName;
    }

    @Override
    public String execute() throws Exception {
        File destFile = new File("C:/", zhaoPianFileName);
        FileUtils.copyFile(zhaoPian, destFile);
        return null;
    }
}

下载

package com.ll.action;

import java.io.FileInputStream;
import java.io.InputStream;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class DownloadAction extends ActionSupport {
    private InputStream inputStream = null;// 创建一个InputStream类型,名为inputStream的属性

    private String type;
    private String showName;

    public String getType() {
        return type;
    }

    public String getShowName() {
        return showName;
    }

    public InputStream getInputStream() {
        return inputStream;
    }

    @Override
    public String execute() throws Exception {
        String filename = "F:/f/白冰.jpg";
        // 在这里给inputStream属性赋值
        inputStream = new FileInputStream(filename);
        // 获取文件的MIME类型
        type = ServletActionContext.getServletContext().getMimeType(filename);
        // 设置名称
        showName =  filenameEncoding("/白冰.jpg", ServletActionContext.getRequest());
        return SUCCESS;
    }

//处理下载时文件名中文乱码问题

public static String filenameEncoding(String filename, HttpServletRequest request) throws IOException {
        String agent = request.getHeader("User-Agent"); //获取浏览器
        if (agent.contains("Firefox")) {
            BASE64Encoder base64Encoder = new BASE64Encoder();
            filename = "=?utf-8?B?"
                    + base64Encoder.encode(filename.getBytes("utf-8"))
                    + "?=";
        } else if(agent.contains("MSIE")) {
            filename = URLEncoder.encode(filename, "utf-8");
        } else {
            filename = URLEncoder.encode(filename, "utf-8");
        }
        return filename;
    }
}




0 0
原创粉丝点击