Преобразование двоичных данных в base64 с помощью javascript
HTML5 позволяет хранить данные локально, что я думаю, это здорово. Например, вот как вы можете использовать его:
var store = window.localStorage;
store.setItem('foo', "hellow world");
var test = store.getItem('foo');
// test should = "hellow world"
В html можно динамически отображать изображение, задав его источник следующим образом:
"data:image/jpg;base64," + (base64string)
Итак, мой вопрос: как я могу преобразовать двоичные данные в строку base64, чтобы я мог воспользоваться преимуществами локального хранилища html5?
Например, было бы здорово, если бы я мог:
$.ajax({
url: 'someImage.png',
type: 'POST',
success: function (r) {
// here I want to convert r to a base64 string !
// r is not binary so maybe I have to use a different approach
var data = ConvertToBase64(r);
document.getElementById("img").src = "data:image/png;base64," + data;
},
});
Я знаю, что могу решить эту проблему, обернув изображение вокруг canvas использует html5, а затем преобразует его в base64string. также я могу сделать специальную службу на сервере, которая будет отправлять base64 строковые данные этого образа (someImage.aspx).Я просто хочу знать, можно ли будет получить двоичные данные с сервера и преобразовать их в строку base64.
3 ответов:
Попробуйте
btoaфункция:var data = btoa(r);
Чтобы предотвратить ошибку InvalidCharacterError, вам нужно сделать следующее:
var base64EncodedStr = btoa(unescape(encodeURIComponent(rawData)));
Используйте FileReader для кодирования изображения в виде URL-адреса данных:
jQuery.ajax({...}) .done(function (r) { var reader = new FileReader( reader.onload = (function(self) { return function(e) { document.getElementById("img").src = e.target.result; } })(this); reader.readAsDataURL(new Blob([r])); });
Comments