概述
html的a标签具有download属性,添加该属性后,点击链接,无论该文件是什么格式,浏览器将直接下载它,而不是直接打开。例如以下html代码:
<a href="11.docx" download="测试.docx">测试download</a>
在其他浏览器都可以直接下载,但到了edge浏览器则会自动跳转到view.officeapps.live.com
打开预览。
解决办法
解决办法1
最简单的办法是告诉用户,在链接上右键,选择链接另存为:
解决办法2
edge浏览器是通过识别链接上的文件后缀来判断是否是office文件,是则在线打开。那么只需要将文件链接改到php文件上,通过php来实现下载即可。
示例代码:
download.html:
<a href="download.php?file=11.docx" download="测试.docx">测试download</a>
download.php
<?php
$filePath = $_GET['file'];
//以只读方式打开文件,并强制使用二进制模式
$fileHandle=fopen($filePath,"rb");
if($fileHandle===false){
exit("Can not open file: $filename");
}
//文件类型是二进制流。设置为utf8编码(支持中文文件名称)
header('Content-type:application/octet-stream; charset=utf-8');
header("Content-Transfer-Encoding: binary");
header("Accept-Ranges: bytes");
//文件大小
header("Content-Length: ".filesize($filePath));
//触发浏览器文件下载功能
header('Content-Disposition:attachment;filename="'.urlencode($filename).'"');
//循环读取文件内容,并输出
while(!feof($fileHandle)) {
//从文件指针 handle 读取最多 length 个字节(每次输出10k)
echo fread($fileHandle, 10240);
}
//关闭文件流
fclose($fileHandle);