Получение AWS S3 Недействительный файл растрового изображения

Я боролся с этим некоторое время, и я собираюсь предоставить вам как можно больше информации (некоторые, возможно, неактуальны), потому что я полностью застрял. Я использую Ionic, и я хотел бы сделать снимок с моим телефоном и загрузить его в ведро AWS S3. Я использовал камеру Кордовы, чтобы выполнить это.

Насколько я знаю; эти фотографии выходят в большой строке base64, и я должен преобразовать его в Blob, преобразовать его в объект File, а затем загрузить этот файл в AWS. Однако, когда я делаю это, он всегда загружает его как нечто иное, чем изображение. Всякий раз, когда я его открываю, я получаю сообщение об ошибке:

"Not a valid bitmap file.  its format is not currently supported."

https://s3.amazonaws.com/mng-moment/moment/PA/40.008446_-75.26046_1502414224619.jpg

Вот пример РАБОЧЕЙ РАБОТЫ (это обычно срабатывало так:)

https://s3.amazonaws.com/mng-moment/bestMoments/40.008446_-75.26046_1499659199473.jpg

Я попытался открыть каждый из них в текстовом редакторе, чтобы увидеть, что происходит. Для первого (разбитого) я получаю следующее:

введите описание изображения здесь

Когда я пытаюсь открыть рабочий текст в текстовом редакторе, я получаю следующее:

введите описание изображения здесь

Теперь это похоже на проблему преобразования, но я думаю, что я правильно ее конвертирую.  Вот код, который я использую для загрузки (вы можете увидеть console.logs позже в сообщении):

введите описание изображения здесь

core.js

введите описание изображения здесь

awsServices.js

введите описание изображения здесь

Если вы посмотрите на комментарии в коде, я обозначил некоторые из журналов консоли. Я покажу их здесь для получения дополнительной информации:

A - (uploadToAWS):

A (uploadToAWS)

B - (awsServices.upload):

B (awsServices.upload)

Вот как я конвертирую dataURI в Blob (вызывается в uplpoadToAWS - первый снимок экрана):

введите описание изображения здесь

Это то, что передается в параметр dataURI в коде справа: введите описание изображения здесь

Если есть дополнительная информация, пожалуйста, дайте мне знать. Некоторое время я царапаю голову. Любая помощь приветствуется. Спасибо!

Ответ 1

Как указано в API файлов MDN:

Объект File - это особый вид Blob и может использоваться в любом контексте, который может использовать Blob. В частности, FileReader, URL.createObjectURL(), createImageBitmap() и XMLHttpRequest.send() принимают как Blobs, так и файлы.

Итак, я думаю, ваша проблема заключается в вашей функции uploadToAws, потому что вы сначала создаете Blob, а затем используете Blob для создания файла, когда я думаю, что вы просто должны инициализировать объект File байтом массив, возвращаемый dataURItoBlob, поскольку объект File фактически является объектом Blob.