您的位置:首页 > 编程语言 > Java开发

Struts2_文件下载

2017-07-17 10:38 218 查看
生活可以漂泊,可以孤独,但灵魂必须有所归依。

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


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: