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

从关于该主题的SO问题和我们在网上其他地方的研究(如此Facebook 文档链接 ),似乎可以直接从canvas.toDataURL()上传图像到Facebook – 而无需在服务器上托管图像。

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

这适用于PhoneGap应用。

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

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

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

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

这是我的代码。 我需要使用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);