Ionic - сфотографируйся с камерой и отправь на Amazon S3

0

Я создаю приложение с ионной структурой (angularjs + cordova).

Я хотел бы, чтобы пользователь мог сделать снимок с помощью своей телефонной камеры и отправить его прямо в хранилище S3 на amazon aws.

Я знаю, как сделать снимок, и получить его base64 и его URI в локальной файловой системе:

ngcordova - камера

Я также знаю, как отправить файл на S3 через ajax с помощью jquery

Прямая загрузка на S3

Теперь проблема в том, что все загруженные файлы, которые я нашел, используют "input type = file". Как я могу передать файл загрузчику, используя его локальный URI или кодировку base64?

  • 0
    Вам нужно использовать загрузку файла или вы можете просто использовать простой ajax-запрос и поместить base64 в объект json? - Чтобы создать файл из байтового массива, взгляните на developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL
Теги:
ionic-framework
amazon-web-services
amazon-s3

1 ответ

0
Лучший ответ

Я получил его для работы, преобразовывая файл, возвращенный плагином камеры, в blob, так как файл наследуется от blob, я мог бы отправить его через загрузчик S3, указав имя поддельного локального файла

Вот часть построения blob

        $cordovaCamera.getPicture(options).then(function(imageUrl) {

            var getFileBlob = function (url, cb) {
              var xhr = new XMLHttpRequest();
              xhr.open("GET", url);
              xhr.responseType = "blob";
              xhr.addEventListener('load', function() {
                  cb(xhr.response);
              });
              xhr.send();
            };
            var blobToFile = function (blob, name) {
                blob.lastModifiedDate = new Date();
                blob.name = name;
                return blob;
            };
            var getFileObject = function(filePathOrUrl, cb) {
               getFileBlob(filePathOrUrl, function (blob) {
                  cb(blobToFile(blob, 'test.jpg'));
               });
            };

            //File created
            getFileObject(imageUrl, function (fileObject) {
               deferred.resolve({imageUrl : imageUrl, fileObject : fileObject});
            }); 
          }, function(err) {
            // error
            console.warn(err);
            deferred.reject(err);
          });

Ещё вопросы

Сообщество Overcoder
Наверх
Меню