下載url視頻有以下幾種方案:
1.a標簽download,但是這種因為瀏覽器機制會先打開預覽,圖片與視頻都是這樣。在預覽頁面右鍵下載。如果想通過a標簽直接下載,可以通過設置Nginx配置。
// url為資源地址 // newName為資源的原名稱 // a標簽的url a標簽的download屬性並不能修改名稱,這時候我們就需要用到nginx的一個默認配置renameto達到重置名稱的效果 const tepmUrl = url + '?renameto=' + newName
server {
listen 8086;
server_name 192.168.1.66;
location / {
proxy_pass http://127.0.0.1:8086;
root html;
index index.html index.htm;
}
location /image/ {
root html/devGif;
autoindex on;
// 主要配置
if ($request_filename ~* ^.*?.(txt|doc|pdf|rar|gz|zip|docx|exe|xlsx|ppt|pptx|jpg|png)$){
add_header Content-Disposition 'attachment';
}
//end
}
}
2.通過前端二進制文件流容器,blob對象進行操作。通過xmlHttpRequest進行訪問視頻url地址,得到視頻數據后
轉為二進制文件流保存在blob對象, 再通過createObjectURL創建一個包含二進制文件流額url,再通過創建
a標簽設置下載地址,主動調用下載操作,進行視頻二進制文件流下載
示例代碼如下:
function downFile() {
let url = 'https://xxxx.com"
let name = '視頻資源'
let xhr = new XMLHttpRequest()
xhr.open('GET', url, true)
xhr.responseType = 'blob' // 返回類型blob
// 監聽進度
xhr.onprogress = function (e) {
if (e.lengthComputable) {
// 文件總體積
console.log(e.total)
// 已下載體積
console.log(e.loaded)
}
}
xhr.onload = function () {
if (xhr.readyState === 4 && xhr.status === 200) {
let blob = this.response
// 轉換一個blob鏈接
let u = window.URL.createObjectURL(new Blob([blob]))
let a = document.createElement('a')
a.download = name
a.href = u
a.style.display = 'none'
document.body.appendChild(a)
a.click()
a.remove()
// 釋放
window.URL.revokeObjectURL(u)
}
}
xhr.onerror = function () {
console.log('失敗')
}
xhr.send()
},
