Cordova FileTransfer: загрузить изображение на AWS s3

Использую 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, чтобы задать другой вопрос, который он прокомментировал, но прежде чем я запустил свое приложение, и оно выдает ошибку с параметрами, но мой вопрос, почему я получил ошибку еще до вызова шаблона, связанного с этим контроллером

2 ответа

У меня была похожая проблема: для отладки я использовал журналы живого сервера, чтобы проверить, попала ли загрузка файла на сервер, и я заметил некоторые ошибки:

  • мой сервер ожидал другой ключ файла
  • заголовок Access-Control-Allow-Origin не был правильно отправлен в ответе сервера

Затем я также установил плагин Cordova Native Notification (ссылка здесь) и разбросал оповещения по всем обратным вызовам при передаче файлов, чтобы увидеть, где что-то застряло

Во всяком случае, вероятно, не лучший способ отладки, но это сработало.

Надеюсь, это поможет.

... еще одна вещь, которую часть params "options", кажется, работает лучше всего при применении в этом формате:

    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;

из документа "params: params: набор необязательных пар ключ / значение для передачи в HTTP-запросе. (Объект)", поэтому передача в словаре может быть немного другой, я не уверен, все, что я знаю, это то, что это сработало однажды Я сделал это изменение.

Для отладки на эмуляторе я использую это из моего каталога приложений: ionic emulate ios -lc

Это показывает мне ошибки или журналы в консоли.

Другие вопросы по тегам