-
-
Save andyburke/1498758 to your computer and use it in GitHub Desktop.
// This bit is important. It detects/adds XMLHttpRequest.sendAsBinary. Without this | |
// you cannot send image data as part of a multipart/form-data encoded request from | |
// Javascript. This implementation depends on Uint8Array, so if the browser doesn't | |
// support either XMLHttpRequest.sendAsBinary or Uint8Array, then you will need to | |
// find yet another way to implement this. (This is left as an exercise for the reader, | |
// but if you do it, please let me know and I'll integrate it.) | |
// from: http://stackoverflow.com/a/5303242/945521 | |
if ( XMLHttpRequest.prototype.sendAsBinary === undefined ) { | |
XMLHttpRequest.prototype.sendAsBinary = function(string) { | |
var bytes = Array.prototype.map.call(string, function(c) { | |
return c.charCodeAt(0) & 0xff; | |
}); | |
this.send(new Uint8Array(bytes).buffer); | |
}; | |
} | |
// This function takes an array of bytes that are the actual contents of the image file. | |
// In other words, if you were to look at the contents of imageData as characters, they'd | |
// look like the contents of a PNG or GIF or what have you. For instance, you might use | |
// pnglib.js to generate a PNG and then upload it to Facebook, all from the client. | |
// | |
// Arguments: | |
// authToken - the user's auth token, usually from something like authResponse.accessToken | |
// filename - the filename you'd like the uploaded file to have | |
// mimeType - the mime type of the file, eg: image/png | |
// imageData - an array of bytes containing the image file contents | |
// message - an optional message you'd like associated with the image | |
function PostImageToFacebook( authToken, filename, mimeType, imageData, message ) | |
{ | |
// this is the multipart/form-data boundary we'll use | |
var boundary = '----ThisIsTheBoundary1234567890'; | |
// let's encode our image file, which is contained in the var | |
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 += 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() { | |
console.log( xhr.responseText ); | |
}; | |
xhr.setRequestHeader( "Content-Type", "multipart/form-data; boundary=" + boundary ); | |
xhr.sendAsBinary( formData ); | |
} |
thanks, you saved me :)
var img = document.createElement('img');
img.src = 'http://localhost/quadrinhos/shareImage.png';
img.onload = function () {
var canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img,0,0);
var c = canvas.toDataURL('image/png');
var encodedPng = c.substring(c.indexOf(',')+1,c.length);
var decodedPng = Base64Binary.decode(encodedPng);
PostImageToFacebook(response.authResponse.accessToken, 'shareImage.png', 'image/png', decodedPng, '');
}
This doesn't handle non-ASCII in the message part. Anyone know how to solve that?
I solved the charset problem using the following code in line 46:
formData += 'Content-Type: text/plain; charset=UTF-8\r\n';
formData += 'Content-Disposition: form-data; name="message"\r\n\r\n';
formData += unescape(encodeURIComponent(message)) + '\r\n'
formData += '--' + boundary + '--\r\n';
any one found a way to do this on IE9 ?
great snippet, it seems good for other browser but it fail on safari... can you help me?
getting this error:
------ThisIsTheBoundary1234567890--
photosPOST https://graph.facebook.com/me/photos?access_token=xyzzzzz 400 (Bad Request)
configurator:1440{
"error": {
"message": "(#324) Requires upload file",
"type": "OAuthException",
"code": 324,
"fbtrace_id": "C6NDlXMUwAy"
}
}
i Got this error
{
"error": {
"message": "(#200) Requires extended permission: publish_actions",
"type": "OAuthException",
"code": 200,
"fbtrace_id": "CnTkONRU26Z"
}
}
But i dont getting how to get permission publish_actions
i tried to give permission using my App but
Is anyone have solved publish_actions permission issue?
@AbdulKadir-Ago, how did you fix this publish_actions issue?
i have the same issue with how to upload images from a computer
code: 324
fbtrace_id: "A4xR8fZio4tZUhEF2IInbWM"
message: "(#324) Requires upload file"
type: "OAuthException"
i Got this error
{ "error": { "message": "(#200) Requires extended permission: publish_actions", "type": "OAuthException", "code": 200, "fbtrace_id": "CnTkONRU26Z" } }
But i dont getting how to get permission publish_actions
i tried to give permission using my App but
Is anyone have solved publish_actions permission issue?
goto your facebook developer graph api explorer you will find options for settings all permissions
I am getting this. Can anybody help me out
[00:15:45.797] "{
"error": {
"message": "(#1) An unknown error occurred",
"type": "OAuthException",
"code": 1
}
}"