Page 221 - AngularJS权威教程
P. 221
18.19 处理文件上传 201
在onFile(files)方法中,我们要处理文件上传到S3,并且将记录保存到我们的Dynamo数 1
据库表。我们想做Angular好公民,把这个功能放在UserService服务中,而不是放在控制器里。
首先,需要确认我们有这个能力获取一个S3 JavaScript对象,就像我们让dynamo可用那样。 2
// ...
var dynamoCache = $cacheFactory('dynamo'),
s3Cache = $cacheFactory('s3Cache'); 3
// ...
return {
// ... 4
s3: function(params) {
var d = $q.defer();
credentialsPromise.then(function() { 5
var s3Obj = s3Cache.get(JSON.stringify(params));
if (!s3Obj) {
var s3Obj = new AWS.S3(params);
s3Cache.put(JSON.stringify(params), s3Obj); 6
}
d.resolve(s3Obj);
}); 7
return d.promise;
},
// ...
8
这个方法与Dynamo对象创建的运行方式相同,它让我们可以直接对S3实例对象进行访问。
我们很快就会看到这一点。
9
18.19 处理文件上传
10
为了处理文件上传,我们需要在UserService中创建一个叫做uploadItemForSale()的方法。
出于规划的目的,就功能而言,我们想要: 11
将文件上传到S3;
为该文件获取一个signedUrl; 12
将这个信息保存到数据库。
我们将要在这个过程中使用当前用户,所以必须先确认这个用户存在,然后获取一个实例: 13
// 在scripts/services.js中
// ...
}, 14
Bucket: 'ng-newsletter-example',
uploadItemForSale: function(items) {
var d = $q.defer(); 15
service.currentUser().then(function(user) {
// 处理上传
AWSService.s3({ 16
params: {
Bucket: service.Bucket
}
}).then(function(s3) { 17
// 我们在S3对象中
// 有一个s3 bucket句柄
}); 18
});