Convert Dataurl To Blob And Submit Through Ajax
I'm using the imgly image cropper plugin, slightly modified for my app. It currently converts an image to a dataUrland spits out the image as a base64 image that I can save as a jp
Solution 1:
Updated
"Assuming I keep the app in the same form, I'm trying to figure out how to get the dataURL into the post function."
Try, at lines 15 - 103 at http://jsfiddle.net/mattography/Lgduvce1/6/
var blob; // declare `blob`// As soon as the user selects a file...
fileInput.addEventListener("change", function (event) {
var file; // declare `file` var fileToBlob = event.target.files[0];
blob = newBlob([fileToBlob], {"type":fileToBlob.type});
// do stuff with blobconsole.log(blob);
// Find the selected fileif(event.target.files) {
file = event.target.files[0];
} else {
file = event.target.value;
}
// Use FileReader to turn the selected// file into a data url. ImglyKit needs// a data url or an imagevar reader = newFileReader();
reader.onload = (function(file) {
returnfunction (e) {
data = e.target.result;
// Run ImglyKit with the selected filetry {
imgly.run(data);
} catch (e) {
if(e.name == "NoSupportError") {
alert("Your browser does not support canvas.");
} elseif(e.name == "InvalidError") {
alert("The given file is not an image");
}
}
};
})(file);
reader.readAsDataURL(file);
});
// As soon as the user clicks the render button...// Listen for "Render final image" click
renderButton.click(function (event) {
var dataUrl;
imgly.renderToDataURL("image/jpeg", { size: "1200" }
, function (err, dataUrl) {
// `dataUrl` now contains a resized rendered image with// a width of 300 pixels while keeping the ratio// Convert DataURL to Blob to send over Ajax// function dataURItoBlob(dataUrl) {// convert base64 to raw binary data held in a string// doesn't handle URLEncoded DataURIs // - see SO answer #6850276 for code that does this// var byteString = atob(dataUrl.split(',')[1]);// separate out the mime component// var mimeString = dataUrl.split(',')[0].split(':')[1].split(';')[0];// write the bytes of the string to an ArrayBuffer// var ab = new ArrayBuffer(byteString.length);// var ia = new Uint8Array(ab);// for (var i = 0; i < byteString.length; i++) {// ia[i] = byteString.charCodeAt(i);// }// write the ArrayBuffer to a blob, and you're done// var bb = new BlobBuilder();// bb.append(ab);// return bb.getBlob(mimeString);// }var _data = dataUrl.split(/,/)[1];
// var fd = new FormData(document.forms[0]);var xhr = newXMLHttpRequest();
functionsuccess(response) {
if (response.target.readyState === 4) {
var data = JSON.parse(response.target.response);
var image = "data:" + data.type + ";base64," + data.file;
console.log(image); // `data URI` of resized image
}
}
xhr.onload = success;
// fd.append("myFile", blob);
xhr.open("POST", "/echo/json/", true);
xhr.send("json=" + encodeURIComponent(
JSON.stringify({"file": _data,"type":blob.type})
)
);
Post a Comment for "Convert Dataurl To Blob And Submit Through Ajax"