У меня есть обрезанное изображение, используя этот обрезщик. Он возвращает base64
версию обрезанного изображения.
Я пытаюсь преобразовать этот образ base64
в blob
или file
, чтобы загрузить его в firebase storage
используя приведенный ниже код.
var imageBase64 = $scope.cropper.croppedImage.split(',')[1];
var blob = new Blob([imageBase64], {type: 'image/png'});
var file = new File([imageBase64], 'imageFileName2.png', {type: 'image/png'});
когда я пытался распечатать file
он создал объект acutal File
который выглядит так.
{
lastModified:1471604365544,
lastModifiedDate:"Fri Aug 19 2016 18:59:25 GMT+0800 (PHT)",
name:"imageFileName2.png",
size:228808,
type:"image/png",
webkitRelativePath:""
}
File
загружается успешно, но результат не работает. Предварительный просмотр на панели управления firebase storage
firebase выглядит так (он никогда не останавливает загрузку, и когда я пытался его загрузить, у меня получилось сломанное изображение):
Чтобы доказать, что мой образ base64
не сломан, вот base64
pic моей кошки Акаши, вы можете просмотреть ее в этом средстве просмотра base64.
В 3.3.0 JS-клиенте вы можете просто загрузить строку base64
(docs)!
var imageBase64 = $scope.cropper.croppedImage.split(',')[1];
ref.putString(imageBase64, 'base64').then(function(snapshot) {
console.log('Uploaded a base64 string!');
});
API-интерфейсы Blob
и File
оба берут UInt8Array
, в котором нет base64
строки, поэтому вы в основном создавали массив, содержащий один элемент, который был base64
, которая была недействительной blob. Используйте вышеуказанную загрузку для решения проблемы.
ref.put(imageBlob)
.