使用 fetch
fetch("//xxx.xxx.com/10.pdf", { mode: "cors", }) .then((res) => res.blob()) .then((blob) => { const blobURL = window.URL.createObjectURL(blob); const link = document.createElement("a"); link.style.display = "none"; link.href = blobURL; link.setAttribute("download", decodeURI("10.pdf")); document.body.appendChild(link); link.click(); document.body.removeChild(link); window.URL.revokeObjectURL(blobURL); });
|
使用封装好的 $http
$http({ url: "//xxx.xxx.com/10.pdf", headerType: "download", method: "get", fileName: "download.docx", }).then((res) => {});
|
window.open
缺点:需要同域、可能会被拦截、浏览器支持预览的文件不会直接下载
window.open("//xxx.xxx.com/10.pdf");
|
form 表单提交
缺点:浏览器支持预览的文件不会直接下载
export function download(url, params = {}) { const form = document.createElement("form"); form.method = "post"; form.action = url; form.target = "_blank"; document.body.appendChild(form); for (const key in params) { const value = params[key]; if (value) { const input = document.createElement("input"); input.setAttribute("type", "hidden"); input.setAttribute("name", key); if (isArray(value)) { input.setAttribute("value", stringify(value)); } else { input.setAttribute("value", value); } form.appendChild(input); } } form.submit(); document.body.removeChild(form); }
|
a 标签触发
缺点:可能会被拦截、浏览器支持预览的文件不会直接下载
const link = document.createElement("a"); link.style.display = "none"; link.href = "//xxx.xxx.com/10.pdf"; link.setAttribute("download", decodeURI("10.pdf")); document.body.appendChild(link); link.click(); document.body.removeChild(link);
|
1 和 2 的方式,无论什么文件都是执行下载