使用iframe下载文件

使用iframe下载文件

记录在工作中遇到的一个文件下载问题,之前使用的是a标签的download属性进行操作

例:

1
<a href="/images/20180305.jpg" download="1">

其中a标签的href对应下载文件的路径,download对应的是下载下来的文件名称

但是download属性只支持 Firefox 和 Chrome,所以只能选择其他的方式解决。改成了使用iframe可以进行文件下载

例:

1
2
3
4
5
6
7
8
9
10
11
// 定义html标签
<a href="#" onclick="downloadPicture(url)">imageName</a>'

// 在body中添加一个隐藏的iframe进行文件下载
<script type="text/javascript">
function downloadPicture(url){
$("#temp_iframe").remove();
$("body").append("<iframe id='temp_iframe' style='display:none'></iframe>");
document.getElementById('temp_iframe').src = contextPath+url);
}
</script>

之前在这里还遇到了一个坑,项目使用的是struts2基于注解的方式进行下载的,页面写完js下载之后每次下载都是一个xxx.html的文件,后来发现原因,在struts注解下载中要特别注意指定filename,以下贴一大概的样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 /**
* 文件下载
*
* @return
* @throws Exception
*/
@Action(value = "showWaterPicture",
results = { @Result(name = SUCCESS, type = "stream", params = {
"contentType","application/image/jpeg",
"inputName", "inputStream",
"bufferSize", "4096",
"contentDisposition","attachment;filename=${fileName}",
"contentCharSet", "utf-8" }) })
public String showWaterPicture() throws IOException {

// 相关业务逻辑...
}