2016-05-20 5 views
-1

私はPHPにそのオブジェクトを渡すことができ、FILE変数でそのオブジェクトにアクセスできるように、Javaスクリプトでbase64でエンコードされた文字列をファイルオブジェクトに変換する必要があります。ここでjavascriptでbase64文字列をファイルオブジェクトに変換する方法はありますか?

は私のコードです:

$(document).delegate(':file', 'change', function() { 
    files = !!this.files ? this.files : []; 
    if (!files.length || !window.FileReader) 
    return; // no file selected, or no FileReader support 
    filenum = $(this).attr('data'); 
    $("form#cropmodal #filenum").val(filenum); 

    var oMyForm = new FormData(); 

    for (i = 0; i < files.length; i++) { 

    var ext = $("#ImgId" + filenum).val().split('.').pop().toLowerCase(); 
    output_format = ext; 

    if ($.inArray(ext, ['gif', 'png', 'jpg', 'jpeg']) == -1) { 
    alert('Invalid extension'); 
    return false; 
    } 

    var mime_type = "image/jpeg"; 
    if (typeof output_format !== "undefined" && output_format == "png") { 
    mime_type = "image/png"; 
    } 

    var reader = new FileReader(); 
                  reader.readAsArrayBuffer(files[i]); 

    reader.onload = function (event) { 
    // blob stuff 
    var blob = new Blob([event.target.result]); // create blob... 
    window.URL = window.URL || window.webkitURL; 
    var blobURL = window.URL.createObjectURL(blob); // and get it's URL 

// helper Image object 
    var image = new Image(); 
    image.src = blobURL; 
    //preview.appendChild(image); 
    // preview commented out, I am using the canvas instead 
    image.onload = function() { 
    // have to wait till it's loaded 
    var cvs = document.createElement('canvas'); 
    cvs.width = image.naturalWidth; 
    cvs.height = image.naturalHeight; 
    var ctx = cvs.getContext("2d").drawImage(image, 0, 0); 
    var newImageData = cvs.toDataURL(mime_type, 50/100); 
    var result_image_obj = new Image(); 
    result_image_obj.src = newImageData;               
    var cvs = document.createElement('canvas'); 
    cvs.width = result_image_obj.naturalWidth; 
    cvs.height = result_image_obj.naturalHeight; 
    var ctx = cvs.getContext("2d").drawImage(result_image_obj, 0, 0); 

    var type = "image/jpeg"; 
    var data = cvs.toDataURL(type); 
    data = data.replace('data:' + type + ';base64,', ''); 

    var the_file = new Blob([window.atob(data)], {type: 'image/jpeg', encoding: 'utf-8'}); 
    oMyForm.append("media[]", the_file); 
    oMyForm.append("_token", "{{ csrf_token() }}"); 

    } 
    }; 
} 

});私はあなたが実際にここでやろうとしているものは不明である、それは「ブロブオブジェクト」が表示されますが、私は、「オブジェクト・ファイル」

+0

を必要とする「the_file」警告

。いくつかの行のサンプルコードは、** guesses **の束ではなく便利な答えがほしい場合には非常に便利です** – RiggsFolly

+0

私はちょうどコードを追加しました。 –

+0

ちょうど解決を得ました:http://stackoverflow.com/questions/4998908/convert-data-uri-to-file-then-append-to-formdataありがとう@Stoive –

答えて