Edge浏览器无视download属性自动打开office而不是下载文件

概述

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);

发表评论

邮箱地址不会被公开。 必填项已用*标注