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
Это показывает мне ошибки или журналы в консоли.