Набросал код на ES2015 с использованием VK api и браузерным fetch api для простоты. Код пытается загрузить тестовую фотку на стенку пользователя.
Конечно же, при запуске в консоли высветилась ошибка о том, что сервер не выдал в ответе заголовок Access-Control-Origin и все такое (имя моего хоста изменено):
Fetch API cannot load http://cs622616.vk.com/upload.php?act=do_add&mid=12345&aid=-14&gid=0&ha…70853&rhash=bf7ffe3ac92c408a14accbc12cc74bc0&swfupload=1&api=1&wallphoto=1. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://test.ru' is therefore not allowed access. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.
Если добавить в настройки запроса fetch свойство
{mode: 'no-cors'}
то приходит пустой ответ.
Есть какие-либо соображения? Вот код
VK.api('photos.getWallUploadServer', {}, uploadServer => {
fetch('testimage.jpg')
.then(response => response.blob())
.then((img) => {
var formData = new FormData();
formData.append('photo', img);
fetch(uploadServer.response.upload_url, {
method: 'POST',
headers: new Headers({
'Content-Type': 'multipart/form-data'
}),
body: formData
})
.then(response => response.json())
.then(metaJson => {
VK.api('photos.saveWallPhoto', metaJson, saveWall => {
const photo = `photo${saveWall.owner_id}_${saveWall.id}`;
VK.api('wall.post', {attachments: photo}, wallPost => {
if (!wallPost.error)
console.log('Успех!');
else
console.log('Ошибка:', wallPost.error);
});
});
})
.catch(err => { console.log('Ошибка:', err); })
});
});
И да, для чего делается. Имеется приложение ВК, которое постит картинку-результат на стенку пользователя. Картинка легко генерируется в blob png средствами одной js-библиотеки перевода html в svg и затем в png. Ну а дальше было бы просто здорово загрузить эту картинку сразу с браузера на сервер ВК, попутно не расходуя трафик и ресурсы сервера итд.