现在是根据id请求接口,返回一个http地址(是存在阿里云的word pdf文件)。这个地址直接用window.location.href打开,就是预览pdf。
下图是百度试了a标签的方法还是预览,不能下载
还是用这个地址怎么实现下载文件功能?
谢谢大佬解答。
现在是根据id请求接口,返回一个http地址(是存在阿里云的word pdf文件)。这个地址直接用window.location.href打开,就是预览pdf。
下图是百度试了a标签的方法还是预览,不能下载
还是用这个地址怎么实现下载文件功能?
谢谢大佬解答。
response header 需要是application/octet-stream,浏览器才会给你下载,你这能预览估计是application/pdf,
如果后端愿意给你加响应头就和后端协商加参数改header,实在不行,我记得前端也是可以自己拿到流然后自己生成文件的,blob 吧好像
window.open(url)
window.open打开文件资源路径保存文件,该方法交给浏览器下载,会在浏览器下方出现下载进度条,批量下载超过四个会被浏览器拦截,使用定时器settimeout()处理
这个得后端实现,因为你前端只是提交数据,你设置的header只是request的属性,request是后端接收,要实现response下载,你前端要做的只是window.open(link)
或者像你写的点个a标签,假设你的link为http://xxxx.com/download,后端应该提供一个/download接口,并且返回一个文件,以express为例:
const downloadName = `/a/b/xxx.pdf`;
res.setHeader('Content-disposition', `attachment; filename=${downloadName}`);
res.download(filePath, downloadName);
就直接触发了浏览器的下载,前段不需要做任何处理
可以试一下下面这段代码。
/**
* 下载文件
* @param name 文件名
* @param href 文件地址
*/
export const download = (name, href) => {
const a = document.createElement("a");
const e = document.createEvent("MouseEvents");
e.initEvent("click", false, false); // 初始化事件对象
a.href = href; // 设置下载地址
a.download = name; // 设置下载文件名
a.dispatchEvent(e); // 给指定的元素,执行事件click事件
};
10 回答11.1k 阅读
6 回答3k 阅读
5 回答4.8k 阅读✓ 已解决
4 回答3.1k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
3 回答5.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
参考前端常用图片文件下载上传方法
demo参考pdf下载
responseType
需要改为 "blob"