Page 222 - AngularJS权威教程
P. 222
202 第 18 章 服务器通信
return d.promise;
},
// ...
S3 bucket的句柄让我们得以创建一个可供上传的文件。AWS在上传到S3的时候需要三个参数。
Key:文件对象的键。
Body:文件自身的blob。
ContentType:文件类型。
所幸,当我们从浏览器获取文件对象的时候,它上面的信息都是可用的。
// ...
// 处理上传
AWSService.s3({
params: {
Bucket: service.Bucket
}
}).then(function(s3) {
// 我们在S3对象中
// 有s3 bucket句柄
var file = items[0]; // 获取第一个文件
var params = {
Key: file.name,
Body: file,
ContentType: file.type
}
s3.putObject(params, function(err, data) {
// 文件已经上传
// 或者上传过程中出错
});
});
// ...
S3在上传文件时默认处于受保护状态。它什么都不用做,就可以防止我们把文件上传并且开
放给公众。这个特性保证了我们上传到S3的所有东西都是受保护的,迫使我们在决定哪些文件要
公开或者不要公开的问题上作出理智的选择。
记住这一点后,我们来创建一个临时地址,它会在一个给定时间之后失效。在ngroad市场中,
这个URL会在供出售的每个东西上提供一个失效时间。
在任何情况下,要创建一个临时URL,我们都先要获取一个signedURL,并且把它存储在Users
Item关联表中:
// ...
s3.putObject(params, function(err, data) {
if (!err) {
var params = {
Bucket: service.Bucket,
Key: file.name,
Expires: 900*4 // 1 hour
};
s3.getSignedUrl('getObject', params,
function(err, url) {
// 现在有了url
});
}