Преобразование больших двоичных объектов в base64
- Это фрагмент кода, который я хочу сделать Blob
to 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
обновление:
есть ли более простой способ сделать это с помощью JQuery, чтобы иметь возможность создавать строку Base64 из файла Blob, как в коде наверху?
6 ответов:
var reader = new FileReader(); reader.readAsDataURL(blob); reader.onloadend = function() { base64data = reader.result; console.log(base64data); }
формы docs
readAsDataURL
кодирует в base64
это сработало для меня:
var blobToBase64 = function(blob, cb) { var reader = new FileReader(); reader.onload = function() { var dataUrl = reader.result; var base64 = dataUrl.split(',')[1]; cb(base64); }; reader.readAsDataURL(blob); };
Итак, проблема в том, что вы хотите загрузить базовое изображение 64, и у вас есть url-адрес blob. Теперь ответ, который будет работать на всех браузерах 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);} }); }
вы можете исправить проблему:
var canvas = $('#canvas'); var b64Text = canvas.toDataURL(); b64Text = b64Text.replace('data:image/png;base64,',''); var base64Data = b64Text;
Я надеюсь, что это поможет вам