admin 管理员组文章数量: 887021
问题解释:
当前端给后端上传了一个txt或jpg文件时,后端将返回一个文件地址给前端,前端在用这个返回的文件地址进行下载操作时,会出现浏览器自动打开了txt,jpg.png等文件,并没有直接进行下载操作,txt文件可能也会乱码等问题。
解决代码:
// url 文件地址
fetch(url).then(res => res.blob()).then(blob => { // 将链接地址字符内容转变成blob地址
const link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = '文件名称';
link.target = '_blank';
document.body.appendChild(link);
link.click();
link.remove();
}).catch(() => {
alert('下载文件失败');
});
问题:在线下环境中会出现跨越问题。
解决:使用服务器代理解决
在webpack.config.js 文件下
proxy: {
'/bpi': {
target: 'http://xxxx.xxxxxx:xxxx', // 下载文件的服务地址
}
},
修改下载地址
const obj = {
fileName: '文件名称',
url: '文件地址'
}
function download(obj) {
// 从文件下载地址中取出服务地址 如 http://xxxx.xxxxxx:xxxx
let str = '';
obj.url.split('/').forEach((item, index) => {
if (index === 0) {
str = str + item + '//';
} else if (index === 2) {
str = str + item;
}
});
// 把文件服务地址替换成当前服务地址,并拼接上 'bpi'
const url = obj.url.replace(str, window.location.href + 'bpi');
fetch(url).then(res => res.blob()).then(blob => { // 将链接地址字符内容转变成blob地址
const link = document.createElement('a');
link.href = URL.createObjectURL(blob);
link.download = obj.fileName;
link.target = '_blank';
document.body.appendChild(link);
link.click();
link.remove();
}).catch(() => {
alert('下载文件失败');
});
}
版权声明:本文标题:纯前端解决浏览器下载 txt,jpg等文件自动打开预览页面的问题 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1727324131h1101842.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论