需要从浏览器下载任何类型的文件。从后端呈现asp.net页面后,URL(外部服务器)的路径可以动态更改,因此我只能使用Javascript下载每个文件。
对于pdf,mp4,xml,xls,doc,jpg,png,png,浏览器打开文件而不是下载。
我使用的是HTML5“下载”属性,但在最新更新之一后无法使用。
也尝试过XMLHttpRequest创建blob文件,然后下载但不起作用
我最后一次尝试是使用download.js库,这似乎是壁橱解决方案,但它只是下载空文件...
<script src="~/js/download.js"></script>
function download_mp4(url) {
download('', url, 'video/mp4');
}
该库的源代码在这里:
http://danml.com/download.html#Download
已经研究了他们建议的旧帖子,因为浏览器已经更改了打开/下载文件的方式,并且无法从服务器代码下载,因为其他情况只是发送了适当的标头,所以
编辑:
我通过这种方式(JS代码)解决了此问题:
function downloadFile(file_location, filename) {
const download_server = "https://www.myserver.com/index.php";
var encoded_url = btoa(file_location);
window.location = download_server + "?url=" + encoded_url + "&title=" + filename;
}
PHP文件代码:
<?php
$url = base64_decode(filter_var($_GET['url']));
$title = urldecode($_GET['title']);
downloadFile($url,$title);
function downloadFile($url,$title)
{
// Fetch and serve
if ($url)
{
$headers = get_headers($url, 1);
$size = $headers?$headers['Content-Length']:"";
$mime = $headers?$headers['Content-Type']:"";
$ext = pathinfo($url, PATHINFO_EXTENSION);
$name = $title .'.' .$ext;
if (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== FALSE)
{
header('Content-Type: "' . $mime . '"');
header('Content-Disposition: attachment; filename="' . $name . '"');
header('Expires: 0');
header('Content-Length: '.$size);
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header("Content-Transfer-Encoding: binary");
header('Pragma: public');
}
else
{
header('Content-Type: "' . $mime . '"');
header('Content-Disposition: attachment; filename="' . $name . '"');
header("Content-Transfer-Encoding: binary");
header('Expires: 0');
header('Content-Length: '.$size);
header('Pragma: no-cache');
}
readfile($url);
echo "<script>
window.close();
</script>";
exit;
}
exit('File not found');
}
?>