3

我正在使用ng-cordova 文件传输插件将图像上传到我的AWS s3 bucket.

但我遇到了两个问题,首先它没有工作,其次我不知道如何在应用程序在模拟器上运行时调试问题。

这是我的代码:

.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 代码来询问另一个已评论的问题,但是在我运行我的应用程序之前,它给了我一个参数错误,但我的问题是为什么我什至在调用与该控制器关联的模板之前就得到了错误

4

2 回答 2

1

我遇到了类似的问题,为了调试,我使用实时服务器日志来检查文件上传是否完全命中服务器,我注意到了一些错误:

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

然后,我还安装了 cordova 原生通知插件(链接在这里)并在整个文件传输回调中散布警报,以查看事情卡在哪里

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

希望有帮助。

...另一件事“选项”的参数部分似乎在以这种格式应用时效果最好:

    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请求。(对象)”所以传入字典可能略有不同,我不确定,我只知道它工作过一次我做了那个改变。

于 2015-04-09T10:54:57.777 回答
0

要在模拟器上调试,我从我的应用程序目录中使用它:ionic emulate ios -lc

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

于 2016-04-13T15:02:20.347 回答