版权声明:本文为博主原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接和本声明。
在上一篇博客 Struts2框架之文件上传 介绍了在struts框架中如何进行文件上传,下面将介绍如何使用struts框架进行文件的下载。
在不使用struts框架时,我们也可以通过servlet进行文件下载(参考:Java Web通过Servlet实现文件下载)。这种方式我们还需要进行文件流操作,而使用struts框架后,这些操作都可以有框架操作。
第1步:创建download动作。
package cn.hestyle.web.action;
import com.opensymphony.xwork2.ActionSupport;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.InputStream;
public class DownloadAction extends ActionSupport {
private InputStream inputStream;
//需要实现inputStream的getter、setter方法
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
public String download() throws FileNotFoundException {
//对inputStream进行赋值
File file = new File("/Users/hestyle/Desktop/动漫照片.jpg");
inputStream = new FileInputStream(file);
return "success";
}
}
第2步:在struts.xml
文件中配置inputStream
<?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="p1" extends="struts-default">
<action name="download" class="cn.hestyle.web.action.DownloadAction" method="download">
<!-- 配置成功视图 -->
<result name="success" type="stream">
<!-- 配置输出流 -->
<param name="inputStream">inputStream</param>
<!-- 以附件的方式传递 -->
<param name="contentDisposition">attachment;filename=image.jpg</param>
<param name="contentType">application/octet-stream</param>
</result>
</action>
</package>
</struts>
第3步:在浏览器访问download动作
扩展:动态设置文件名
在上面我们把文件名写死了,其实也可以动态设置。
修改DownloadAction
动作,添加fileName
、getFileName
方法属性,并且将fileName进行URL转码(防止中文乱码)。
package cn.hestyle.web.action;
import com.opensymphony.xwork2.ActionSupport;
import java.io.*;
import java.net.URLEncoder;
public class DownloadAction extends ActionSupport {
private InputStream inputStream;
private String fileName;
//需要实现inputStream的getter、setter方法
public InputStream getInputStream() {
return inputStream;
}
public void setInputStream(InputStream inputStream) {
this.inputStream = inputStream;
}
//需要实现fileName的getter、setter方法
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
public String download() throws FileNotFoundException, UnsupportedEncodingException {
//对inputStream进行赋值
File file = new File("/Users/hestyle/Desktop/动漫照片.jpg");
fileName = file.getName();
//进行url转码,放置前端出现中文乱码的情况
fileName = URLEncoder.encode(fileName, "utf-8");
inputStream = new FileInputStream(file);
return "success";
}
}
修改配置文件
浏览器访问download动作。
以上就是Struts2框架之文件下载的主要内容,感谢各位道友的阅读,顺带给个关注,点个赞呗~