StrutsCatalog系列(6)--文件下载
2005-11-14 22:51
232 查看
/**
作者:Joe Vienneau
译者:Rifoo Technology(http://www.rifoo.com)
时间:2005-11-10
备注:转载请保留以上声明
**/
Struts 1.2.6中推出了新的DownloadAction,用来简化下载操作。
getStreamInfo()方法。如果我们要更改默认的缓冲大小,我们也可以覆盖
getBufferSize()方法。
部类,其实是个内部接口。DownloadAction为这个接口提供了两个具体的静态内
部实现类:
FileStreamInfo - 简化从磁盘系统下载文件。需要连同content type传入一个java.io.File对象到构造方法中。
ResourceStreamInfo - 简化从web应用资源下载文件。需要传入ServletContext,路径以及content type 到它的构造方法中。
在下面的例子中,我们还提供了一个以Byte array方法实现StreamInfo接口的代
码。
来传输文件的缓冲区大小
使用文件
使用web应用资源
使用byte array
mapping的parameter属性来得到文件名。
import java.io.File;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DownloadAction;
public class ExampleFileDownload extends DownloadAction{
protected StreamInfo getStreamInfo(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
// Download a "pdf" file - gets the file name from the
// Action Mapping's parameter
String contentType = "application/pdf";
File file = new File(mapping.getParameter());
return new FileStreamInfo(contentType, file);
}
}
action mapping的parameter属性来得到web应用资源的路径。
这个例子创建了一个实现了StreamInfo接口的ByteArrayStreamInfo内部类。
需要做两件事情:
和任何Struts的action一样,需要在struts-config.xml中进行配置。
在WEB页面中使用它对文件进行连接
下面是struts-config.xml配置的一个例子:
那么在我们的JSP页面,可以使用类似下面的例子:
注意:我们可能要将struts配置文件中<controller>属性的nocache值设置为false。如果设置为true,可能在IE上不能成功下载文件,但是在Firefox和Safari上工作正常。
如果需要文件名做为参数,可能需要首先把文件前面的任何路径信息先清除。
在浏览器中打开文件的例子写法: "inline; filename=myFile.pdf"
下载的例子写法: "attachment; filename=myFile.pdf"
显示图片的话,可以使用content disposition的"inline"选项。
作者:Joe Vienneau
译者:Rifoo Technology(http://www.rifoo.com)
时间:2005-11-10
备注:转载请保留以上声明
**/
Struts 1.2.6中推出了新的DownloadAction,用来简化下载操作。
实现DownloadAction
我们需要扩展org.apache.struts.actions.DownloadAction并实现getStreamInfo()方法。如果我们要更改默认的缓冲大小,我们也可以覆盖
getBufferSize()方法。
实现getStreamInfo() 方法
getStreamInfo() 方法返回一个StreamInfo对象- 它是DownloadAction类的内部类,其实是个内部接口。DownloadAction为这个接口提供了两个具体的静态内
部实现类:
FileStreamInfo - 简化从磁盘系统下载文件。需要连同content type传入一个java.io.File对象到构造方法中。
ResourceStreamInfo - 简化从web应用资源下载文件。需要传入ServletContext,路径以及content type 到它的构造方法中。
在下面的例子中,我们还提供了一个以Byte array方法实现StreamInfo接口的代
码。
实现getBufferSize() 方法
DownloadAction默认返回4096byte的缓冲区我们可以覆盖这个方法来自定义用来传输文件的缓冲区大小
范例
下面有三个例子:使用文件
使用web应用资源
使用byte array
FileStreamInfo范例
DownloadAction使用文件的例子。这个范例从struts-config.xml的actionmapping的parameter属性来得到文件名。
import java.io.File;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DownloadAction;
public class ExampleFileDownload extends DownloadAction{
protected StreamInfo getStreamInfo(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception {
// Download a "pdf" file - gets the file name from the
// Action Mapping's parameter
String contentType = "application/pdf";
File file = new File(mapping.getParameter());
return new FileStreamInfo(contentType, file);
}
}
ResourceStreamInfo范例
DownloadAction使用web应用资源的范例。这个范例从struts-config.xml的action mapping的parameter属性来得到web应用资源的路径。
Byte Array 范例
DownloadAction使用字节数组(byte array)的范例。这个例子创建了一个实现了StreamInfo接口的ByteArrayStreamInfo内部类。
在WEB页面上使用DownloadAction
最大的疑惑是我么如何使用这个Action?需要做两件事情:
和任何Struts的action一样,需要在struts-config.xml中进行配置。
在WEB页面中使用它对文件进行连接
下面是struts-config.xml配置的一个例子:
那么在我们的JSP页面,可以使用类似下面的例子:
注意:我们可能要将struts配置文件中<controller>属性的nocache值设置为false。如果设置为true,可能在IE上不能成功下载文件,但是在Firefox和Safari上工作正常。
内容部署(Content Disposition)
设置Content Disposition
DownloadAction不能处理content dispositon头部。最简单的方法是在getStreamInfo()方法中设置,比如:如果需要文件名做为参数,可能需要首先把文件前面的任何路径信息先清除。
Content Disposition的值
我们可以设置content disposition来下载一个文件或者在浏览器中打开一个文件。在浏览器中打开文件的例子写法: "inline; filename=myFile.pdf"
下载的例子写法: "attachment; filename=myFile.pdf"
显示图片的话,可以使用content disposition的"inline"选项。
相关文章推荐
- struts 2文件下载
- struts2.1.6教程九、文件上传下载(了解)
- struts实现简单的文件上传与下载
- 百度云的高速下载技巧系列3---批量文件下载工具pandownload v1.3.5版 (PC)
- 实时开发框架Meteor 实际应用系列<一>---文件的上传和下载
- STM8l 15x系列固件库及帮助文件下载地址
- struts文件下载的实现
- struts2.3.15之文件上传与下载
- struts入门训练 文件下载
- C#微信公众号开发系列教程六(被动回复与上传下载多媒体文件)
- struts文件上传和下载的
- 测试必备技能系列4:如何用SSH向linux服务器上传下载文件
- STRUTS2多文件上传以及下载
- struts-5-上传下载文件
- Struts2系列:(9)Struts的配置文件
- Silverlight实战示例(兼集合属性的妙用)系列源码文件已经上传,大家可下载
- Struts 2中实现文件下载(修正中文问题)
- Struts2.0实现的文件上传(单附件和多附件)以及附件下载功能
- Struts2.1笔记(九):上传和下载文件