4

キャンバスに画像を合成しています。追加情報を使用してトリミングすることで、 base64画像データを取得します。canvas.toDataURL('png')

 var dataUrl = canvas.toDataURL('png');
 var escapedBase64Data = dataUrl.replace("data:image/png;base64,","");

その後、次を使用してFacebookに投稿しようとします:

FB.api('/me/photos', 'post', { source:data});

写真 ( https://developers.facebook.com/docs/reference/api/user/ ) には source プロパティがあります。これは、写真のデータ コンテンツ ( multipart/form-data ) を配置する場所です。

ヘッダーを指定して、 base64でエンコードされたデータを multipart/form-dataに変換します。

結果は次のようになります。

--0.2242348059080541
Content-Disposition: file; name="file"; filename="image.png"
Content-Type: image/png
Content-Transfer-Encoding: base64

iVBORw0KGgoAAAANSUhEUgAAAfQAAAH0CAYAAADL1t+KAAAbBElEQVR4Xu3dP4jre0LG4V2xsFVYEKy
...    
QAAAABJRU5ErkJggg==

--0.2242348059080541--

FB API 呼び出しを完了すると、次のエラーが表示されます。

Object {message: "(#324) Requires upload file", type: "OAuthException", code: 324} 

助言がありますか?

ありがとう

4

2 に答える 2

1

ここに実際のコード例があります:

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);
于 2013-05-02T16:18:21.857 に答える