Не удалось получить содержимое вложений из Circuit с помощью XMLHttpRequest
У меня есть список URL-адресов вложений, и я хочу скачать его в один клик. Я загрузил URL-адреса в виде массива в JavaScript. Затем я использую XMLHttpRequest для получения содержимого файла. Тем не менее, кажется, что заголовок или аутентификация не верны при отправке в Circuitsandbox (а затем в Circuit для продуктивной работы), я всегда получаю сообщение об ошибке 401 или 404, даже если этот URL-адрес может быть загружен в браузере.
Итак, мой вопрос, какой заголовок / аутентификацию я должен использовать для моего запроса?
Это мой пример:
var auth = user + ':' + password;
var hash = Base64.encode(auth);
...
xhr.setRequestHeader("Authorization", "Basic " + hash );
Должен ли я использовать свой пользователь (адрес электронной почты) и пароль для Circuitsandbox здесь?
Большое спасибо за любой намек.
1 ответ
Api-файл Circuit для загрузки вложений не поддерживает базовую аутентификацию. Поскольку вы выполняете это в браузере, в котором уже есть сеанс, все, что вам нужно, это установить для xhr.withCredentials значение true. Это будет использовать куки вашего текущего сеанса. См. https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/withCredentials
Я только что создал пример jsbin, который загружает вложения сообщения. Просто введите itemId сообщения. Элемент itemId можно увидеть, если щелкнуть правой кнопкой мыши отметку времени в сообщении на веб-клиенте Circuit.
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);