使用Facebook Graph API和JavaScript上传照片:将画布图像转换为multipart / form-data作为POST正文?

时间:2012-04-18 18:14:38

标签: javascript jquery facebook facebook-graph-api cordova

关于这个主题的SO question以及我们在网上其他地方的研究(比如这个Facebook doc link),似乎可以直接从canvas.toDataURL()上传图像到Facebook - 没有在服务器上托管图像。

我们面临的问题是如何将base64编码的数据从toDataURL()转换为Facebook期望的multipart / form-data。这是否可以在客户端使用JavaScript和jQuery.post()?如果没有,我们可以先在服务器上保存图像,但如果可能的话,最好绕过这一步,并从客户端做一切。

这适用于PhoneGap应用。

2 个答案:

答案 0 :(得分:2)

可以将画布作为图片上传到服务器上。我在2年前做过测试,你可以查看代码:http://standupweb.net/canvas/swSaveCanvas.php

那是使用mootools,但实际上并不需要它,save函数中的所有内容都是本机JS代码。

将其与facebook集成应该不是一个大问题

答案 1 :(得分:1)

基本上,您需要从URI scheme中删除'data:image / png; base64'(例如,使用canvas.toDataURL(“image / png”))并将其解码为原始形式的图像源。

这是我的代码。我需要使用dojo.toJson,因为facebook发生了一个奇怪的错误。

jQuery.post('index.php',{ 
    data : dojo.toJson({
    image_data: img,
    signed_request: signedRequest
 })
},function(d){

});

这是PHP

$data = json_decode($_POST['data']);        
$message = $data->message;
$uploadImage = $data->image_data;
$uploadImage = str_replace('data:image/png;base64,', '', $uploadImage);
$uploadImage = base64_decode($uploadImage);

$name = uniqid('image_') . '.png';
file_put_contents('public/images/users/' . $name, $uploadImage);

$image = array(
    'message' => $message,
    'src' => '@' . realpath('public/images/users/' . $name),
);
$result = $this->_facebook->uploadPhoto($image);