XMLHttpRequest无法从Circuit获得附件内容

时间:2018-09-06 07:26:44

标签: circuit-sdk

我有一个附件的URL列表,想一键下载。我已将网址加载为JavaScript中的数组。然后,我使用XMLHttpRequest来获取文件内容。但是,发送到Circuitsandbox(然后再发送到Circuit以提高生产效率)时,标题或身份验证似乎不正确,尽管该URL可以在浏览器上下载,但我始终会收到错误401或404。

所以我的问题是我应该为请求使用什么标头/身份验证?

这是我的示例:

var auth = user + ':' + password; var hash = Base64.encode(auth); ... xhr.setRequestHeader("Authorization", "Basic " + hash );

我应该在这里使用我的用户(电子邮件)和密码作为Circuitsandbox吗?

非常感谢您提供任何提示。

1 个答案:

答案 0 :(得分:0)

用于下载附件的Circuit文件api不支持基本身份验证。由于您是在已经具有会话的浏览器中运行此程序,因此只需将xhr.withCredentials设置为true。这将使用您当前会话的cookie。参见https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials

我刚刚创建了一个示例jsbin,用于下载帖子的附件。只需输入帖子的itemId。右键单击Circuit Web客户端上的帖子中的时间戳时,您可以看到itemId。

https://output.jsbin.com/napenuy

client.getItemById(itemId.value) 
.then(item => {
  console.log('Attachments:', item.attachments);

  item.attachments.forEach(file => {
    const xhr = new XMLHttpRequest();
    xhr.open('GET', file.url, true);
    xhr.withCredentials = true; 
    xhr.onload = function(e) {
      if (this.status == 200) {
        result.innerHTML += `<br>${file.fileName}:<br>${this.responseText}`;  
      } 
    }
    xhr.send();    
  })
}) 
.catch(console.error);