【问题标题】:create download links for any file type JS为任何文件类型 JS 创建下载链接
【发布时间】:2019-08-29 09:51:17
【问题描述】:

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

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 中是否有一个函数可以下载每个具有自定义名称的文件扩展名?

【问题讨论】:

    标签: javascript php html


    【解决方案1】:

    您可以通过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;
    

    【讨论】:

    • 能写下如何触发下载吗?我现在正在使用$.ajax,但这似乎不起作用
    • 可以是与target="blank"的普通链接。下载开始后,新的浏览器选项卡/窗口应打开并自动关闭。
    • 但是我需要将文件名和原始名称发布到该页面吗?页面如何知道哪些值
    • 是的,您需要发布可以唯一标识数据库中行的内容。例如,这可能是一个 ID 或原始名称。我已经更新了我的答案。
    • 当我下载它时。文档或文件为空
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-18
    • 2016-03-09
    • 2019-02-05
    • 2020-06-27
    相关资源
    最近更新 更多