我是新手做出反应& JS。请帮我解决下面的问题。
场景:我从后端获得SEE_OTHER
类型的响应,其中包含该文件的URL,我需要在浏览器上下载该文件。
来自后端的响应类似于:
{ status:"SEE_OTHER"
context: {
...
...
headers:
Access-Control-Allow-Methods: ["GET, POST, DELETE, PUT"]
Access-Control-Allow-Origin: ["*"]
Location:[url from where file is to be downloaded]
.....
}
}
我正在尝试从响应中提取URL后下载文件并执行以下函数:
async download(url) {
let res = await fetch(URL.format(url));
if(res.status >= 400) {
throw Error(`HTTP error: ${res.status}`);
}
if(res.status === 200) {
setTimeout(() => {
window.location.href = res.url;
}, 100);
}
}
但是我在浏览器控制台上遇到了以下错误。
无法加载 'www.xyz.com/abc.json' 请求中不存在“Access-Control-Allow-Origin”标头 资源。因此不允许来源“http://localhost:2000” 访问。如果不透明的响应满足您的需求,请设置请求 模式为'no-cors'以获取禁用CORS的资源。
如果我在chrome上使用this extension,则上述代码有效。但是什么是这个问题的永久解决方案。
另外,有什么方法可以直接从响应中下载文件。
答案 0 :(得分:1)
如果您使用快递,请在后端服务中使用以下包来解决问题。
https://github.com/expressjs/cors
问题在于,默认情况下,浏览器会出于安全原因而阻止跨域/域访问。请参考以下链接,