Struts2实现文件下载

先说下stream结果类型:它是用于实现文件下载的功能,需要指定一个输入流,即inputStream参数,通过这个流我们就可以读取要下载的文件内容。实现文件下载也并非如此简单,我们还需要对相关的参数进行配置,如MIME类型,HTTP请求头信息,缓冲区的大小等。

stream结果类型的配置参数

名称作用
contenType设置发送到游览器的MIME类型
contenLength设置文件的大小
contenDispoition设置响应的HTTP头信息中的Content-Disposition参数值
inputName指定Action中提供的inputStream类型的属性名称
bufferSize设置读取和下载文件时的缓冲区大小

FileDownAction

package cn.wgb.action;

import com.opensymphony.xwork2.ActionSupport;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;

public class FileDownAction extends ActionSupport {

    //读取下载文件的目录
    private String inputPath;

    //下载文件的文件名
    private String fileName;

    //读取下载文件的输入流
    private InputStream inputStream;

    //下载的文件类型
    private String conetnType;

    public InputStream getInputStream() throws FileNotFoundException {

        String path = "D:\\Hibernate\\strutsUpload\\src\\main\\webapp\\"+(inputPath);

        return new BufferedInputStream(new FileInputStream(path+"\\"+fileName));
    }

    @Override
    public String execute() throws Exception {

        return SUCCESS;
    }

    public String getInputPath() {
        return inputPath;
    }

    public void setInputPath(String inputPath) {
        this.inputPath = inputPath;
    }

    public String getFileName() {
        return fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }

    public void setInputStream(InputStream inputStream) {
        this.inputStream = inputStream;
    }

    public String getConetnType() {
        return conetnType;
    }

    public void setConetnType(String conetnType) {
        this.conetnType = conetnType;
    }
}

配置Stream结果类型在struts.xml文件中配置

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
        "http://struts.apache.org/dtds/struts-2.5.dtd">

<struts>

    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>

    <!--创建一个default包,继承自Struts2的struts-default包-->
    <package name="default" namespace="/" extends="struts-default">
        
        <action name="download" class="cn.wgb.action.FileDownAction">
            <param name="inputPath">upload</param>
            <result name="success" type="stream">
                <param name="conetnType">image/gif</param>
                <param name="inputName">inputStream</param>
                <param name="contentDisposition">
                    attachment;filename="${fileName}"
                </param>
                <param name="bufferSize">4096</param>
            </result>
        </action>
    </package>
</struts>

contenType对应的文件类型

文件类型contenType设置
Wordapplication/msword
Excelapplication/vnd.ms-excel
PPTapplication/vnd.ms-powepoint
图片image/gif,image/bmp,image/jpeg
文本文件text/plain
HTML网页text/html
任意的二进制数据application/octet-stream

通常情况下,将参数直接设置为application/octet-stream即可。
contentDispoition参数由两个部分组成,前面的部分表示处理文件的形式,如attachment表示在下载时弹出对话框,提示用户保存或者直接打开该文件,后一部分表示下载文件的文件名称,两部分间以;进行分隔。

最后来看简单下载的jsp页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>文件下载</title>
</head>
<body>
    <a href="download.action?fileName=shuoshuo.PNG">点此处下载</a>
</body>
</html>

这样就可以下载文件了

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烟锁着秦楼

海底月是天上月,眼前人是心上人

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值