Amazon S3 浏览器直接上传唯一文件名
Amazon S3 browser direct upload unique file name
我正在使用 Node.js 和 Amazon aws sdk 签署上传请求,因此我可以从 Angular 应用程序直接上传。它工作得很好,除了我无法获得唯一的文件名。我曾尝试创建唯一的存储桶,但我无法让 CORS 设置起作用。由于无法在浏览器中重命名文件,这对我来说是个谜。有人有这方面的经验吗?
生成的 LoopBack.io 远程方法现在如下所示,在参数中设置 'Key' 就成功了。
Project.signS3 = function(filename, cb){
var aws = require('aws-sdk');
var AWS_ACCESS_KEY = process.env.AWS_ACCESS_KEY;
var AWS_SECRET_KEY = process.env.AWS_SECRET_KEY;
var S3_BUCKET = '...';
aws.config.update({
accessKeyId: AWS_ACCESS_KEY,
secretAccessKey: AWS_SECRET_KEY,
region: 'eu-central-1',
signatureVersion: 'v4'
});
// Figure out a unique filename
var ext = filename.split('.').pop();
var random = Math.floor(Math.random() * 900000000000000000);
filename = random + '.' + ext;
var s3 = new aws.S3();
var s3_params = {
Bucket: S3_BUCKET,
Key: filename,
Expires: 60,
ACL: 'public-read'
};
s3.getSignedUrl('putObject', s3_params, function(err, data){
if(err){
console.log(err);
}
else{
var return_data = {
signed_request: data,
url: 'https://'+S3_BUCKET+'.s3.amazonaws.com/'+filename
};
cb(null, return_data);
}
});
}
我正在使用 Node.js 和 Amazon aws sdk 签署上传请求,因此我可以从 Angular 应用程序直接上传。它工作得很好,除了我无法获得唯一的文件名。我曾尝试创建唯一的存储桶,但我无法让 CORS 设置起作用。由于无法在浏览器中重命名文件,这对我来说是个谜。有人有这方面的经验吗?
生成的 LoopBack.io 远程方法现在如下所示,在参数中设置 'Key' 就成功了。
Project.signS3 = function(filename, cb){
var aws = require('aws-sdk');
var AWS_ACCESS_KEY = process.env.AWS_ACCESS_KEY;
var AWS_SECRET_KEY = process.env.AWS_SECRET_KEY;
var S3_BUCKET = '...';
aws.config.update({
accessKeyId: AWS_ACCESS_KEY,
secretAccessKey: AWS_SECRET_KEY,
region: 'eu-central-1',
signatureVersion: 'v4'
});
// Figure out a unique filename
var ext = filename.split('.').pop();
var random = Math.floor(Math.random() * 900000000000000000);
filename = random + '.' + ext;
var s3 = new aws.S3();
var s3_params = {
Bucket: S3_BUCKET,
Key: filename,
Expires: 60,
ACL: 'public-read'
};
s3.getSignedUrl('putObject', s3_params, function(err, data){
if(err){
console.log(err);
}
else{
var return_data = {
signed_request: data,
url: 'https://'+S3_BUCKET+'.s3.amazonaws.com/'+filename
};
cb(null, return_data);
}
});
}