Cordova FileTransfer:将图像上传到AWS s3

时间:2015-03-31 15:15:50

标签: angularjs amazon-s3 ionic ngcordova

使用ng-cordova file-Transfer插件将图片上传到AWS s3 bucket

但是我遇到了两个问题,首先它没有用,第二个我不知道如何在App上运行App时调试问题。

这是我的代码:

.controller('newItemCtrl', function($scope, $http, API_URL, me, $cordovaFileTransfer) {
       var s3URI = encodeURI("https://mybucketname.s3.amazonaws.com/"),
                policyBase64 = "MY_BASE64_ENCODED_POLICY_FILE",
                signature = "MY_BASE64_ENCODED_SIGNATURE",
                awsKey = 'my AWSAccessKeyId',
                acl = "public-read";

        var options = {
            fileKey: "avatar",
            fileName: "image.png",
            chunkedMode: false,
            mimeType: "image/png"
    //        params = {
    //            "key": fileName,
    //            "AWSAccessKeyId": awsKey,
    //            "acl": acl,
    //            "policy": policyBase64,
    //            "signature": signature,
    //            "Content-Type": "image/png"
    //        }
        };

        var imageURI = '../img/ionic.png';
        $scope.upload = function($cordovaFileTransfer) {

            $cordovaFileTransfer.upload(s3URI, imageURI, options)
                .then(function(result) {
                    console.log("SUCCESS: " + JSON.stringify(result.response));
                }, function(err) {
                    console.log("ERROR: " + JSON.stringify(err));
                }, function(progress) {
                    // constant progress updates
                });
        }
})

我还留下了params代码来询问另一个被评论的问题,但是在我运行我的应用程序之前它给了我一个错误的参数但是我的问题为什么我甚至在调用与该控制器相关的模板之前就得到了错误

2 个答案:

答案 0 :(得分:1)

我有一个类似的问题,调试我使用实时服务器日志检查并查看文件上传是否完全命中服务器,我发现了一些错误:

  • 我的服务器期待不同的文件密钥
  • 在服务器的响应中未正确发送Access-Control-Allow-Origin标头

然后,我还安装了cordova原生通知插件(链接here),并在整个文件传输回调中发出警报,以查看事情陷入困境

无论如何可能不是调试的最佳方式,但它确实有用。

希望有所帮助。

......在以这种格式应用时,“选项”的参数部分似乎最有效:

    var options = {
        fileKey: "avatar",
        fileName: "image.jpg",
        /*params: {
          "value1":"value1",
          "value2": "value2"
        }*/
    };

    var params = new Object();
    params.value1 = "value1";
    params.value2 = "value2";
    options.params = params;
来自cordova docs“params:一组可选的键/值对,用于传递HTTP请求。(对象)”所以传入字典可能会略有不同,我不确定,所有我知道,一旦我做出改变,它就起作用了。

答案 1 :(得分:0)

要在模拟器上进行调试,请在我的应用目录中使用:ionic emulate ios -lc

这会向我显示错误或登录到控制台。