ngCordova相机上传到Amazon S3

时间:2015-05-13 04:26:25

标签: cordova amazon-s3 ionic-framework ionic ngcordova

我正在尝试将从ngCordova中的iOS相机拍摄的图像上传到Amazon S3上的存储桶。我无法调试此代码。我不确定我的问题是S3还是我的相机。有没有办法调试在设备上运行的离子/ ngCordova应用程序?

.controller('AddMediaCtrl', function($scope, $cordovaCamera) {

  //////////////////////////////////////////////////////////
  //                     AMAZON S3                       //
  ////////////////////////////////////////////////////////
    $scope.creds = {
      bucket: 'bucket_name',
      access_key: '*************',
      secret_key: '*************'
    }

    var bucket = new AWS.S3({params: {Bucket: $scope.creds.bucket }});
    AWS.config.update({accessKeyId: $scope.creds.access_key, secretAccessKey: $scope.creds.secret_key});
    AWS.config.region = 'us-east-1';

    var upload = function(file){

      results.innerHTML = '';

      var params = {Key: file.name, ContentType: file.type, Body: file};
      bucket.upload(params, function (err, data) {
        console.log(err);
      });
    }




   //////////////////////////////////////////////////////////
   //                     CAMERA                          //
   ////////////////////////////////////////////////////////
   $scope.images = [];
    var image = {}
   $scope.addImage = function() {
    // 2
    var options = {
      destinationType : Camera.DestinationType.FILE_URI,
      sourceType : Camera.PictureSourceType.CAMERA, // Camera.PictureSourceType.PHOTOLIBRARY
      allowEdit : true,
      encodingType: Camera.EncodingType.JPEG,
      popoverOptions: CameraPopoverOptions,
      saveToPhotoAlbum: true
    };

    // 3
    $cordovaCamera.getPicture(options).then(function(imageData) {

    // 4
    image.data = imageData;
    image.type = 'image/jpeg'

      onImageSuccess(imageData);

      function onImageSuccess(fileURI) {
        createFileEntry(fileURI);
      }

      function createFileEntry(fileURI) {
        window.resolveLocalFileSystemURL(fileURI, copyFile, fail);
      }

      // 5
      function copyFile(fileEntry) {
        var name = fileEntry.fullPath.substr(fileEntry.fullPath.lastIndexOf('/') + 1);
        var newName = makeid() + name;
        image.name = newName

        window.resolveLocalFileSystemURL(cordova.file.dataDirectory, function(fileSystem2) {
        fileEntry.copyTo(
          fileSystem2,
          newName,
          onCopySuccess,
          fail
        );
        },
        fail);
        //upload to S3
        upload(image);
      }

      // 6
      function onCopySuccess(entry) {
        $scope.$apply(function () {
          $scope.images.push(entry.nativeURL);
        });
      }

      function fail(error) {
        console.log("fail: " + error.code);
      }

      function makeid() {
        var text = "";
        var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

        for (var i=0; i < 5; i++) {
          text += possible.charAt(Math.floor(Math.random() * possible.length));
        }
        return text;
      }

      }, function(err) {
        console.log(err);
    });
  }




})

3 个答案:

答案 0 :(得分:0)

您可以使用intel xdk进行设备调试。这是在我找到的混合应用程序的设备上进行调试的最佳方法。安装intel xdk:https://software.intel.com/en-us/html5/tools,添加项目,然后在顶部单击debugg选项卡。它会告诉您连接设备的步骤。运行调试器,它就像一个魅力。

答案 1 :(得分:0)

如果有方法在设备上调试应用,请回答您的问题:

最简单的方法是运行以下命令:

ionic run ios -l -c -s

参数 -l <​​/ strong> -c -s 代表:

  • -livereload 从设备实时重新加载应用开发者文件
  • -consolelogs 将应用控制台日志打印到Ionic CLI
  • -serverlogs 将开发服务器日志打印到Ionic CLI

这将在控制台实时显示所有类型的消息:错误,调试和console.logs消息!

答案 2 :(得分:0)

要在设备上进行调试,我推荐使用此软件。事实很有帮助,您可以看到应用程序在物理设备中的行为方式。 Html,CSS,功能等。

GapDebug