0

我有一个附件的 url 列表,想一键下载。我已将 url 作为 javascript 中的数组加载。然后我使用 XMLHttpRequest 来获取文件内容。但是,在发送到 Circuitsandbox(以及后来发送到 Circuit 以进行生产)时,标题或身份验证似乎不正确,即使可以在浏览器上下载该 url,我总是会收到错误 401 或 404。

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

这是我的例子:

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

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

非常感谢您的任何提示。

4

1 回答 1

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);
于 2018-09-06T14:17:07.037 回答