我有一个链接,如果用户点击它,我需要做2件事情:
- 向用户发送适当的HTTP响应(尤其是带有
Content-Type: video/mp4
) - 并且一个视频文件将自动开始下载。
我已经在PHP中看到了类似的东西,但只用HTML/JavaScript是否可能?
你可以使用 "download" 属性
<a href="http..." download></a>
或者使用指定的文件名
<a href="http..." download="filename.pdf"></a>
了解更多:https://developer.mozilla.org/en/HTML/element/a#attr-download
自动的结果很大程度上取决于浏览器及其选项。但是,您可以通过响应中的Content-Disposition
头告诉浏览器您希望发生什么(然后它将与用户进行双重检查)。例如,将其设置为attachment;filename=blah.mp4
将在大多数浏览器上邀请用户下载它(使用该文件名),即使通常浏览器会尝试在其自己的界面中显示/播放内容。有关详细信息,请参见链接。(对于mp4文件,下载可能是默认设置,但这取决于用户;当提供HTML文件的下载链接时,我认为这很有用。)
如果您不使用服务器端脚本(正如您所说的那样),则可以通过配置在Web服务器中设置标头。例如,对于这些视频文件的URL,您可以使用Apache规则并使用Header
指令。
<script src=
"https://cdnjs.cloudflare.com/ajax/libs/axios/0.19.2/axios.min.js"></script>
<button onclick="download()">Download</button>
<script>
let downloadUrl = 'https://example.com/image.jpg';
let downloadName = 'image.jpg';
function download(){
axios({
url: downloadUrl,
method:'GET',
responseType: 'blob'
})
.then((response) => {
const url = window.URL.createObjectURL(new Blob([response.data]));
const link = document.createElement('a');
link.href = url;
link.setAttribute('download', downloadName);
document.body.appendChild(link);
link.click();
});
}
</script>
Content-Disposition
的答案之后,David编辑了他的答案以包括它。) - T.J. Crowder