Я использую AWS-SDK для загрузки изображений в ведро S3. Я делаю это, потому что для этого не существует библиотеки angular4. Функция выглядит так...
public uploadImageToS3(fileInput:any, imageNumber){
let AWSService = (<any> window).AWS;
let file = fileInput.target.files[0];
let fileNameAdjusted = this.imagePathService.getRandomString()+file.name;
AWSService.config.accessKeyId = "access key";
AWSService.config.secretAccessKey = "secret access key";
var s3 = new AWSService.S3({signatureVersion:'V4'});
let bucket = new AWSService.S3({params:{Bucket:"bucket name"}, signatureVersion:'v4', ContentType: 'image/jpeg', ACL: 'public-read'});
//I think the Key value is the name of the file to be written to S3, but not sure.
let params = {Key:fileNameAdjusted, Body:file};
bucket.upload(params, function(error, res){
console.log(imageNumber);
console.log(res);
console.log(error);
if(error!=null && imageNumber==1){
return res;
}
else{
return error;
}
}
);
}
Эта функция не работает, потому что я не могу вернуть значения из асинхронного запроса, подобного этому. Как я могу вернуть эти значения так же, как сделать HTTP-запросы с чистыми угловыми функциями?
Когда это делается с угловым4 'toPromise()', используется в HTTP-запросе, а также функция 'then()', которая действует как обработчик обратного вызова. В любом случае, чтобы получить это поведение/функциональность с вышеуказанным кодом javascript в приложении angular4?
Вам нужно изменить команду bucket.upload, чтобы выглядеть так.
bucket.upload({params, function(err, data) {
if (err) {
return alert('There was an error uploading your photo: ', err.message);
}
// Do Successfull upload scenario
alert('Successfully uploaded photo.');
});
Ссылка: http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/s3-example-photo-album.html