2017-07-03 39 views
1

对于一个项目,我从多个社交网络中检索图片。我使用Pinterest,我可以列出这些引脚并将其显示为URL。但是当我想用XMLHttpRequest下载图片时,我收到一个CORS错误。检索图片时Pinterest CORS错误

是因为Pinterest的政策还是有其他方法来做我?

这里是我的代码

console.log("Url de l'image: " + this.snURL); 
      //bug avec Pinterest 
      var xhr = new XMLHttpRequest(); 
      var _self = this; 
      xhr.onload = function() { 
       var reader = new FileReader(); 
       reader.onloadend = function() { 
        console.log(reader.result); 
        _self.initRealisationLocalStorage(); 
        workInProgress.Start('Traitement de l\'image'); 
        workInProgress.Info('Traitement de l\'image'); 
        $scope.uploadPhotoNotLocalstorage(reader.result); 
       } 
       reader.readAsDataURL(xhr.response); 
      }; 
      xhr.open('GET', this.snURL); 
      //xhr.setRequestHeader("Access-Control-Allow-Origin","*"); 
      xhr.responseType = 'blob'; 
      xhr.send(); 
}); 

如果有人有一个解决方案或跑的解释,我会很高兴地听到它

+0

没有人可以帮忙吗? – digitalTrilunaire

回答

0

当调用从浏览器直接(JavaScript)的存在安全另一个域以防止任意包含外部数据。

当这是允许的,它通常是谁定义CORS头“访问控制允许来源”服务器,但我想这是不能接受的Pinterest的每一个域添加调用它们的API。

对于他们推荐使用他们的SDK here,它会使用您配置的重定向URL在Pinterest的应用。作为后备,否则他们将使用postMessage API

由于这个原因(浏览器端的CORS限制),我认为您不能将JavaScript直接从JavaScript调用到API,请参阅this post

另一种可能性是建立在你身边的代理后端(如Node.js的项目),这使得查询到Pinterest的API,然后你在查询你身边代理从你的Javascript AJAX 你不会有CORS因为后端调用会在你身边,甚至它被部署在不同的域中,你可以自己在后端设置CORS头。

我觉得SDK方式将解决你问题,它看起来是调用直接从浏览器的API时做的唯一途径。

+0

感谢您的回复,我从来没有听说过postMessage,它可以是有用的。我放弃了Pinterest的目的,因为它与我的项目不相关,但当我试图下载图片表单url时,我遇到了与Google Photo图片相同的问题。为了解决这个问题,我用这个php函数使用我的后端:[file_get_contents](http://php.net/manual/en/function.file-get-contents.php)。 – digitalTrilunaire