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

时间:2019-01-03 23:16:56

标签: javascript php jquery html

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

一个要点:URL的外部(因此我没有机会接触它),但是我想在下载开始之前指定文件名。

我通过PHP进行了尝试,但是我不确定这种方法是否是最好的/最简单的方法。因为我必须定义一些头文件,这些头文件当前不适用于(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,该怎么办。我可以使用相同的标题吗?

1 个答案:

答案 0 :(得分:1)

好像您忘记了在那些链接上包含协议(即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() in 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>`
    

    注意,我在这些JS示例中使用的是template literals


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

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