如何处理重定向请求以响应浏览器上的下载文件。

时间:2018-02-14 18:06:42

标签: javascript java reactjs cors

我是新手做出反应& 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,则上述代码有效。但是什么是这个问题的永久解决方案。

另外,有什么方法可以直接从响应中下载文件。

1 个答案:

答案 0 :(得分:1)

如果您使用快递,请在后端服务中使用以下包来解决问题。

https://github.com/expressjs/cors

问题在于,默认情况下,浏览器会出于安全原因而阻止跨域/域访问。请参考以下链接,

https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS