Struts2_文件下载

生活可以漂泊,可以孤独,但灵魂必须有所归依。

Struts2中,文件下载是常用的,下面是文件下载的相关步骤:

1.首先有一个前端界面

<%@ page language="java" pageEncoding="UTF-8" %>
<%@ page contentType="text/html; charset=UTF-8" %>

<!DOCTYPE html >
<html>
<head>
<meta  charset="UTF-8">
<title>下载界面</title>
</head>
<body>
    <a href="download.action">下载</a>
</body>
</html>

2.配置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>
        <package name="root" namespace="/" extends="struts-default">
            <action name="download" class="com.action.DownloadAction">
                <result type="stream">
                    <param name="inputName">input</param>
                    <param name="contentDisposition"> attachment;filename=${filename}</param>
                </result>
            </action>
        </package>
    </struts>

注意:

1.结果类型必须要写成type=”stream”,与之对应的处理类是org.apache.struts2.dispatcher.StreamResult。
2.
1)<param name="contentDisposition">attachment;fileName="${fileName}"</param>
contentDisposition默认是 inline(内联的), 比如说下载的文件是文本类型的,就直接在网页上打开,不能直接打开的才会打开下载框自己选择
2) attachment :下载时会打开下载框
3) fileName=”${fileName}” :在这定义的名字是一个动态的,该名字是显示在下载框上的文件名字

3.Action处理

package com.action;

import java.io.InputStream;

import org.apache.struts2.ServletActionContext;

public class DownloadAction {
    //定义一个输入流,对于客户端是输入流,但是对于服务端是输出流
    private InputStream input;
    //定义一个文件名字
    private String filename;
    public InputStream getInput() {
        return input;
    }
    public void setInput(InputStream input) {
        this.input = input;
    }
    public String getFilename() {
        return filename;
    }
    public void setFilename(String filename) {
        this.filename = filename;
    }

    public String execute() {
        filename="1.jpg";
        input=ServletActionContext.getServletContext().getResourceAsStream("/upload/"+filename);
        System.out.println(input);
        return "success";
    }
}

文件名有中文的时候,会有中文乱码问题,需要对文件名进行编码处理。

注意:处理的顺序,需要先获取输出流,在处理文件名。

public String execute() {
        filename="哈哈.jpg";
        input=ServletActionContext.getServletContext().getResourceAsStream("/upload/"+filename);
        System.out.println(input);
        //针对中文乱码,进行转码
        try {
            filename=URLEncoder.encode(filename, "UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return "success";
    }

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值