226

これは、文字列に対して実行Blobしたいコードのスニペットです。Base64

このコメント部分は機能し、これによって生成された URL が img src に設定されている場合、画像が表示されます。

var blob = items[i].getAsFile();
//var URLObj = window.URL || window.webkitURL;
//var source = URLObj.createObjectURL(blob);
//console.log("image source=" + source);

var reader = new FileReader();
reader.onload = function(event){
console.log(event.target.result)
}; // data url!
var source = reader.readAsBinaryString(blob);

問題は下のコードにあり、生成されたソース変数はnullです

アップデート:

上記のコードのように、Blob ファイルから Base64 文字列を作成できるように JQuery でこれを行う簡単な方法はありますか?

4

12 に答える 12

413
var reader = new FileReader();
reader.readAsDataURL(blob); 
reader.onloadend = function() {
  var base64data = reader.result;                
  console.log(base64data);
}

base64 にエンコードするドキュメント を形成するreadAsDataURL

有能な機能としてawait

function blobToBase64(blob) {
  return new Promise((resolve, _) => {
    const reader = new FileReader();
    reader.onloadend = () => resolve(reader.result);
    reader.readAsDataURL(blob);
  });
}

注: blob の結果は、Base64 でエンコードされたデータの前にある Data-URL 宣言を最初に削除しないと、Base64 として直接デコードできません。Base64 でエンコードされた文字列のみを取得するには、最初に data: / ;base64 を結果から削除します。

于 2013-09-06T05:05:00.900 に答える
45

これは私のために働いた:

var blobToBase64 = function(blob, callback) {
    var reader = new FileReader();
    reader.onload = function() {
        var dataUrl = reader.result;
        var base64 = dataUrl.split(',')[1];
        callback(base64);
    };
    reader.readAsDataURL(blob);
};
于 2016-10-27T16:19:07.367 に答える
6

問題は、base 64 画像をアップロードする必要があり、blob の URL があることです。すべての html 5 ブラウザーで機能する答えは次のとおりです。

  var fileInput = document.getElementById('myFileInputTag');
  var preview = document.getElementById('myImgTag');

  fileInput.addEventListener('change', function (e) {
      var url = URL.createObjectURL(e.target.files[0]);
      preview.setAttribute('src', url);
  });
function Upload()
{
     // preview can be image object or image element
     var myCanvas = document.getElementById('MyCanvas');
     var ctx = myCanvas.getContext('2d');
     ctx.drawImage(preview, 0,0);
     var base64Str = myCanvas.toDataURL();
     $.ajax({
         url: '/PathToServer',
         method: 'POST',
         data: {
             imageString: base64Str
         },
     success: function(data) { if(data && data.Success) {}},
     error: function(a,b,c){alert(c);}
     });
 }
于 2017-02-04T08:50:41.080 に答える
4
async function blobToBase64(blob) {
  return new Promise((resolve, _) => {
    const reader = new FileReader();
    reader.onloadend = () => resolve(reader.result);
    reader.readAsDataURL(blob);
  });
}

let blob = null; // <= your blob object goes here

blobToBase64(blob)
  .then(base64String => console.log(base64String));

以下も参照してください。

于 2021-02-11T16:51:22.313 に答える
0

リストに保存するbase64値にアクセスできるものが欲しかったので、イベントリスナーを追加するとうまくいきました。必要なのは、画像ブロブを読み取り、結果で base64 を返す FileReader だけです。

createImageFromBlob(image: Blob) {
    const reader = new FileReader();
    const supportedImages = []; // you can also refer to some global variable
    reader.addEventListener(
      'load',
      () => {
        // reader.result will have the required base64 image
        const base64data = reader.result;
        supportedImages.push(base64data); // this can be a reference to global variable and store the value into that global list so as to use it in the other part
      },
      false
    );
    // The readAsDataURL method is used to read the contents of the specified Blob or File.
    if (image) {
      reader.readAsDataURL(image);
    }
 }

最後の部分は、指定された Blob のコンテンツを読み取るために使用される非常に重要な readAsDataURL です。

于 2020-07-31T05:21:18.470 に答える