Skip to content Skip to sidebar Skip to footer

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})
                       )
    );

See also Handling_the_upload_process_for_a_file

Post a Comment for "Convert Dataurl To Blob And Submit Through Ajax"