Как загрузить изображение в FB прямо из браузера [дубликат]

Static: Obj.someMethod

Используйте static, если вы хотите предоставить доступ к классу на уровне класса, то есть где метод должен быть доступен для вызова без экземпляра класса.

4
задан thedev 1 April 2013 в 08:39
поделиться

2 ответа

Вот простое решение:

const dataURItoBlob = (dataURI) => {
    let byteString = atob(dataURI.split(',')[1]);
    let ab = new ArrayBuffer(byteString.length);
    let ia = new Uint8Array(ab);
    for (let i = 0; i < byteString.length; i++) {
        ia[i] = byteString.charCodeAt(i);
    }
    return new Blob([ia], {
        type: 'image/jpeg'
    });
}
const upload = async (response) => {
    let canvas = document.getElementById('canvas');
    let dataURL = canvas.toDataURL('image/jpeg', 1.0);
    let blob = dataURItoBlob(dataURL);
    let formData = new FormData();
    formData.append('access_token', response.authResponse.accessToken);
    formData.append('source', blob);

    let responseFB = await fetch(`https://graph.facebook.com/me/photos`, {
        body: formData,
        method: 'post'
    });
    responseFB = await responseFB.json();
    console.log(responseFB);
};
document.getElementById('upload').addEventListener('click', () => {
    FB.login((response) => {
        //TODO check if user is logged in and authorized publish_actions
        upload(response);
    }, {scope: 'publish_actions'})
})

Источник: http://www.devils-heaven.com/facebook-javascript-sdk-photo-upload-from-canvas/

0
ответ дан luschn 20 August 2018 в 11:16
поделиться

Здесь приведен пример рабочего кода:

var boundary = '----ThisIsTheBoundary1234567890';
var formData = '--' + boundary + '\r\n'
formData += 'Content-Disposition: form-data; name="source"; filename="' + filename + '"\r\n';
formData += 'Content-Type: ' + mimeType + '\r\n\r\n';

for (var i = 0; i < imageData.length; ++i)
{
    formData += String.fromCharCode(imageData[ i ] & 0xff);
}

formData += '\r\n';
formData += '--' + boundary + '\r\n';
formData += 'Content-Disposition: form-data; name="message"\r\n\r\n';
formData += f.message + '\r\n'
formData += '--' + boundary + '--\r\n';

var xhr = new XMLHttpRequest();
xhr.open('POST', 'https://graph.facebook.com/me/photos?access_token=' + authToken, true);
xhr.onload = xhr.onerror = function() {
    // error managment
};
xhr.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + boundary);

//Send the request
xhr.sendAsBinary(formData);
1
ответ дан RaspDealer 20 August 2018 в 11:16
поделиться
  • 1
    Вы заставили это работать? Я получаю сообщение об ошибке, и это работает на Firefox, но не на Chrome, вероятно, из-за того, что sendAsBinary () не прототипирован. Мысли? – Justin McCraw 8 May 2013 в 22:48
  • 2
    попробуйте запустить chrome следующим образом: cd C: \ Program Files (x86) \ Google \ Chrome \ Application chrome.exe & quot; PATHTOYOURPAGE & quot; --allow-file-access-from-files --disable-web-security – RaspDealer 23 May 2013 в 14:35
Другие вопросы по тегам:

Похожие вопросы: