我想找到一种解决方案,用于在单击 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/