文件下载是一个很常见的功能,用struts2实现文件下载的步骤:
一)定义一个Action类,FileDownload.java
<span style="font-size:18px;">package com.wsy.forum.upload.action;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import com.wsy.framework.action.BaseAction;
/**
* @author Administrator
* download file
*
*/
public class DownloadAction extends BaseAction {
private static final long serialVersionUID = 1L;
private int number;
private String fileName;
@Override
public String execute() throws Exception {
return SUCCESS;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public InputStream getDownloadFile() throws Exception {
String name1 = "新建 Microsoft Office Word 文档.docx";
String name2 = "late.jpg";
this.fileName = name2;
this.fileName = new String(this.fileName.getBytes("gb2312"), "ISO-8859-1");
String f1 = "20140722103956.jpg";
String f2 = "20140722094619.docx";
String filePath = "D://uploadRoot/" + f1;
File file = new File(filePath);
InputStream is = new FileInputStream(file);
return is;
}
}
</span>
二)在struts.xml文件中配置相关信息
<span style="font-size:18px;"><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<package name="helloworld" extends="struts-default" namespace="/pages/login">
<action name="fileDownloadAction" class="com.wsy.forum.upload.action.DownloadAction">
<result name="success" type="stream">
<param name="contentType">text/plain</param>
<param name="contentDisposition">attachment;fileName="${fileName}"</param>
<param name="inputName">downloadFile</param>
<param name="bufferSize">1024</param>
</result>
</action>
</package>
</struts></span>
1.结果类型必须要写成 type="stream" ,与之对应的处理类是 org.apache.struts2.dispatcher.StreamResult
2.涉及到的参数:
3.
1) <param name="contentDisposition">attachment;fileName="${fileName}"</param>
contentDisposition默认是 inline(内联的), 比如说下载的文件是文本类型的,就直接在网页上打开,不能直接打开的才会打开下载框自己选择
2) attachment :下载时会打开下载框
3) fileName="${fileName}" :在这定义的名字是一个动态的,该名字是显示在下载框上的文件名字
4.<param name="inputName">downloadFile</param>,这个downloadFile名字要和FileDownload.java类中的getDownloadFile()方法名去掉get 一致
三)用于显示下载的链接界面 downLoadFile.jsp
<span style="font-size:18px;"><%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
request.setAttribute("path", request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"/");
%>
<!DOCTYPE HTML>
<html>
<head>
<base href="${path}">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
This is my JSP page.
<br><br><br>
<h1>download files:</h1><br><br>
<a href="${path}/pages/login/fileDownloadAction.action">点击下载</a>
</body>
</html>
</span>