用戶點擊下載多媒體文件(圖片/視頻等),最簡單的方式:javascript
<a href='url' download="filename.ext">下載</a>
若是url指向同源資源,是正常的。html
若是url指向第三方資源,download會失效,表現和不使用download時一致——瀏覽器能打開的文件,瀏覽器會直接打開,不能打開的文件,會直接下載。瀏覽器打開的文件,能夠手動下載。前端
解決方案一:將文件打包爲.zip/.rar等瀏覽器不能打開的文件下載。java
解決方案二:經過後端轉發,後端請求第三方資源,返回給前端,前端使用file-saver等工具保存文件。web
若是url指向的第三方資源配置了CORS,download依然無效,但能夠經過xhr請求獲取文件,而後下載到本地。後端
/** * 用FileSave保存文件 * @param url */ export function downloadUrlFile(url) { const xhr = new XMLHttpRequest(); xhr.open('GET', url, true); xhr.responseType = 'blob'; xhr.setRequestHeader('Authorization', 'Basic a2VybWl0Omtlcm1pdA=='); xhr.onload = () => { if (xhr.status === 200) { // 獲取圖片blob數據並保存 saveAs(xhr.response, 'abc.jpg'); } }; xhr.send(); } /** * URL方式保存文件到本地 * @param name 文件名 * @param data 文件的數據 */ function save(name, data) { var urlObject = window.URL || window.webkitURL || window; var export_blob = new Blob([data]); var save_link = document.createElementNS('http://www.w3.org/1999/xhtml', 'a') save_link.href = urlObject.createObjectURL(export_blob); save_link.download = name; _fakeClick(save_link); }
瀏覽器已經限制死跨域下載多媒體文件的各類方式。跨域