Публикация

подписчиков: 2 Подписаться
0
Avatar

Загрузка картинок через JSON API

Добрый день 

Есть проблема с загрузкой картинок из JSON API.

После получения данных о товарах, я пытаюсь получить изображения по image.meta.href (URL вида https://online.moysklad.ru/api/remap/1.1/download/<<guid>>) мне возвращается redirect (HTTP код 302) после чего  пытаюсь дозапросить информацию из заголовка location (URL вида https://120708.selcdn.ru/prod-files/0b110267-bcbb-…a8ed2c&temp_url_expires=1506072867&filename=3.jpg) и получаю 404 (Not Found). При попытке сделать запрос на тот же URL без параметров, возвращается 403 (Forbidden). Хотелось бы понять как в итоге должна работать загрузка картинок через API. Больше вариантов не придумал.

Прилагаю код если это как-то поможет:

const base64Auth = new Buffer(`${_environment.MY_WAREHOUSE_LOGIN}:${_environment.MY_WAREHOUSE_PWD}`).toString('base64');
const fetchOptions = {
method: 'GET',
credentials: 'include',
headers: {
'Content-Type': 'application/octet-stream',
'Authorization': `Basic ${base64Auth}`
},
redirect: 'manual'
};

fetch(`https://online.moysklad.ru/api/remap/1.1/download/${material.imageRefId}`, fetchOptions).then(function (resp) {
if (resp.status === 302) {
let newLocation = resp.headers._headers.location[0];
newLocation = newLocation.substr(0, newLocation.indexOf('?'));
return fetch(newLocation, fetchOptions);
}
return null;
}).then(function (result) {
if (result) {
console.log('Got the file!');
}
}).catch(function (err) {
console.log(err);
});

 

 

 

Nikita Sushkov

Войдите в службу, чтобы оставить комментарий.

Комментариев: 2

1
Avatar

Буквально на днях решал эту проблему.

В редиректе на сервер selcdn передаются лишний заголовок BasicAuth и по этой причине сервер кидает 404. Уберите его - заработает.

Да и Content-Type не обязателен в заголовках.

Денис 1 голос