javascript - 为任何文件类型 JS 创建下载链接

标签 javascript php html

我有一个存储一些文件的页面。
这些文件可能有所不同:.pdf.csv.jpg.doc.png .xlsx
我想要每个文件都有一个下载按钮,可以直接下载文件。
我还想在下载时给它们一个自定义名称。
我正在使用 PHP 脚本循环浏览我保存的文件。
我正在为每个文件保存一个随机名称和数据库内的原始名称。
enter image description here 我想使用文件的原始名称而不是随机名称下载每个文件。
我尝试使用在堆栈上找到的这个脚本来下载文件并重命名它。

function downloadfile(url, name) {
    var a = document.createElement("a");
    a.href = url;
    a.download = name;
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
}

但这似乎不适用于 .csv.pdf 类型文件。
当我单击应下载 .pdf 文件的链接时,它会在浏览器中打开该文件。
对于其他文件类型,它根本不会重命名。
JS 中是否有一个函数可以下载具有自定义名称的每个文件扩展名?

最佳答案

您可以通过 setting the Content-Disposition header 在 PHP 中执行此操作:

<?php

$mimeType = mime_content_type($fileName);

header("Content-disposition: attachment; filename=$originalName");
header("Content-type: $mimeType");
readfile($fileName);

注意:我使用 mime_content_type() 添加了动态生成的 mime 类型到链接的示例。

然后将下载按钮链接到此脚本并向其传递应下载的特定文件,然后设置 $fileName$originalName 变量。

<a href="downloadFile.php?file=1">Download</a>

在脚本中(伪代码):

$row = // select * from files where id = $_GET['id']
// or 
$row = // select * from files where name = $_GET['name']

// add your column names
$fileName = $row->fileName;
$originalName = $row->originalName;

关于javascript - 为任何文件类型 JS 创建下载链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57707559/

相关文章:

html - css ID 区域内的 CSS 表格设计

html - 如何使 3 个 DIV 的中间拉伸(stretch)以垂直填充

javascript - 基于内部图标的传单簇颜色

javascript - 在 JavaScript 中,当局部变量被提升时,它是否在声明之前就在范围内?

javascript - 如何使用 AngularJS 为 ion-list 元素实现动态样式?

php - 字母数字数组排序(警告 : spaces as a thousands separator in numbers)

php - 用于搜索建议程序的简单 PHP/Ajax - 仅显示完整输入的数据库结果

php - 如何从数据库中检索 id 以删除信息?

javascript - (func(){}()); 之间的区别vs (函数(){})();

jquery - 如何将字形图标与 Accordion 标题的第一行对齐