Получение 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.