当我单击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,该怎么办。我可以使用相同的标题吗?
答案 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;
}