Struts2_文件下载

来源:互联网 发布:js获取json中的数据 编辑:程序博客网 时间:2024/05/22 01:59

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

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";    }

这里写图片描述

原创粉丝点击