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

Struts2学习9--文件下载

2013-11-11 22:35 267 查看

一、解决

1)文件中文名称容易出错的问题

2)对下载进行权限管理

二、基本原理:

直接链接到一个action里去,这个action执行后输出的结果类型是type="stream"类型。

三、实现方法

1)JSP

<a href="<%=basePath%>fileOp/download?fileName=1.png">图片文件下载</a>


2)action配置

<package name="/fileOp" extends="struts-default">
<action name="download"  class="com.meetcomet.util.FileDownLoadAction">
<param name="path">/download</param>
<result name="success" type="stream">
<param name="contentType">
image/bmp,image/x-png,image/gif,image/pjpeg
</param>
<!-- 文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,而附件方式会弹出文件保存对话框,否则浏览器会尝试直接显示文件。 -->
<param name="contentDisposition">
attachment;filename=${fileName}
</param>
<param name="inputName">targetFileName</param>
<!-- 缓冲区大小 -->
<param name="bufferSize">2048</param>
</result>
<result name="error">/fail.jsp</result>
</action>
</package>


3)Action

public class FileDownLoadAction extends ActionSupport {

private String fileName;
private String path;
private InputStream targetFileName;

public String getFileName() {
return fileName;
}

public void setFileName(String fileName) {
this.fileName = fileName;
}

public String getPath() {
return ServletActionContext.getServletContext().getRealPath(path);
}

public void setPath(String path) {
this.path = path;
}

public String execute() {
// TODO Auto-generated method stub
String filePath=getPath()+ "\\" + getFileName();
try {
targetFileName=new FileInputStream(filePath);
return SUCCESS;
} catch (FileNotFoundException e) {
e.printStackTrace();
return ERROR;
}

}

public InputStream getTargetFileName() {
return targetFileName;
}

public void setTargetFileName(InputStream targetFileName) {
this.targetFileName = targetFileName;
}

}


View Code
注意:其他例子直接把文件名写在了配置里面,如下:这种太不方便了吧。

<package name="/fileOp" extends="struts-default">
<action name="download"  class="com.meetcomet.util.FileDownLoadAction">
<param name="path">/download</param>
<param name="fileName">1.png</param>  <!-- -不一样的地方 -->
   <result name="success" type="stream">
<param name="contentType">
image/bmp,image/x-png,image/gif,image/pjpeg
</param>
<!-- 文件下载的处理方式,包括内联(inline)和附件(attachment)两种方式,而附件方式会弹出文件保存对话框,否则浏览器会尝试直接显示文件。 -->
<param name="contentDisposition">
attachment;filename=${fileName}
</param>
<param name="inputName">targetFileName</param>
<!-- 缓冲区大小 -->
<param name="bufferSize">2048</param>
</result>
<result name="error">/fail.jsp</result>
</action>
</package>


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