Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs Cordova文件传输:将图像上载到AWS s3_Angularjs_Amazon S3_Ionic_Ngcordova - Fatal编程技术网

Angularjs Cordova文件传输:将图像上载到AWS s3

Angularjs Cordova文件传输:将图像上载到AWS s3,angularjs,amazon-s3,ionic,ngcordova,Angularjs,Amazon S3,Ionic,Ngcordova,我使用ng cordova插件将图像上传到myAWS s3 bucket 但是我遇到了两个问题:第一,它不工作;第二,我不知道在模拟器上运行应用程序时如何调试这个问题 这是我的密码: .controller('newItemCtrl', function($scope, $http, API_URL, me, $cordovaFileTransfer) { var s3URI = encodeURI("https://mybucketname.s3.amazonaws.com/")

我使用
ng cordova
插件将图像上传到my
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代码以询问另一个问题,它已被注释,但在我运行我的应用程序之前,它给我一个params错误,但我的问题是,为什么我在调用与该控制器关联的模板之前就出现了错误

我遇到了类似的问题,为了进行调试,我使用live server日志检查并查看文件上传是否命中了服务器,我注意到了一些错误:

  • 我的服务器需要一个不同的文件密钥
  • 服务器响应中未正确发送Access Control Allow Origin标头
然后,我还安装了cordova native notifications插件(link),并在整个文件传输回调过程中发出警报,以查看出现问题的地方

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

希望有帮助

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

    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的“params:HTTP请求中要传递的一组可选键/值对。(Object)”中可以看出,传入字典可能会有细微的不同,我不确定,我所知道的是,一旦我做了更改,它就起作用了。

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


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

如何访问服务器上的“params”对象?我已经试了好几个小时了。。没有成功。我经常在google app engine上使用webapp2,在那里我像在普通帖子中一样访问“params”,比如:“self.request.get('param_name')”。对于文件对象,我使用了self.request.POST['image'],其中'image'是我用于fileKey的。因此,基本上,您是从POST对象获取它们的,可能需要记录整个http POST以找到正确的语法。我使用的是FileTransfer插件的ngCordova实现。我什么都试过了,但还是找不到params对象。然后我切换到本机FileTransfer插件,它成功了。我可以正常使用POST['field']获取参数。不知道包装是坏了还是我没有正确使用。无论如何,谢谢你!