javascript - 哪一种是从具有特定文件名的 URL 下载视频/音频的最佳方法?

标签 javascript php jquery html

我想找到一种解决方案,用于在单击 HTML 按钮时从 URL 下载视频/音频。

一个特别的点:URL是外部的(所以我没有任何机会接触它),但我想在下载开始之前指定文件名。

我通过 PHP 尝试过,但我不确定这种方法是否是最好/最简单的方法。因为我必须定义几个 header ,这些 header 目前不适用于 (mp4) 文件。

<?php
if (isset($_GET['title'], $_GET['link'])) {

    $FileName = $_GET['title'];
    $Link = $_GET['link'];
    $ContentType = get_headers($Link, 1)["Content-Type"];


    header('Content-disposition: attachment; filename="' . $FileName . '"');
    header('Content-type: ' . $ContentType . '');

    readfile($Link);

};
?>

问题:

  • 我做错了什么?我总是收到 0kb 文件。

  • 有没有更简单的方法通过 JS 或 jquery 来实现?

  • 如果我想下载的是纯音频 URL,该怎么办?我可以使用相同的 header 吗?

最佳答案

您似乎忘记在这些链接中包含协议(protocol)(即 https://)。您还需要对 HTML 中的参数进行 URL 编码,这样就不会丢失任何查询参数。

例如,要使用https://example.com/example?test123,您需要

href="download.php?link=https%3A%2F%2Fexample.com%2Fexample%3Ftest123"

可以通过...生成编码参数

  • urlencode()在 PHP 中

    <?php $link = 'https://example.com/example?test123&HERE-is-the-real-Content'; ?>
    <a href="download.php?title=Whatever&link=<?= urlencode($link) ?>">Download</a>
    
  • encodeURIComponent()在 JavaScript 中

    let link = 'https://example.com/example?test123&HERE-is-the-real-Content'
    let a = document.createElement('a')
    a.href = `download.php?title=Whatever&link=${encodeURIComponent(link)}`
    a.textContent = 'Download'
    

    或者,如果您正在构建 HTML 字符串(不推荐)...

    const input_URL = 'https://...'
    html += `<a href="download.php?title=Whatever&link=${encodeURIComponent(input_URL)}">Download</a>`
    

    注意,我正在使用template literals在这些 JS 示例中。

<小时/>

您还应该确保远程 URL 有效。例如

$headers = get_headers($Link, 1);
if (strpos($headers[0], '200 OK') === false) {
    http_response_code(404);
    exit;
}

关于javascript - 哪一种是从具有特定文件名的 URL 下载视频/音频的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54031112/

相关文章:

javascript - jQuery : Attaching mouseup event to all textnodes of a container

php - Laravel 5.2 包 : Auth methods fail in constructor of controller

javascript - 选择类 jquery

javascript - 从子组件 React 传递参数

javascript - 将输入文件值获取到文本框中

php - 如何对 PHP/HTML/MySQL 表进行排序和约束

php - PHP 脚本中的 HTML 复选框和 Mysql

javascript - Ajax获取列表值成为javascript中的变量

jquery - 图像元素不会缩放到 Firefox 或 Chrome 中的屏幕大小?

javascript - 图像无法加载 react typescript