angularjs - Amazon S3浏览器直接上传唯一文件名

标签 angularjs node.js amazon-s3 loopbackjs

我使用 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);
        }
    });
}

关于angularjs - Amazon S3浏览器直接上传唯一文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30803542/

相关文章:

javascript - ionic 文档中的 Angular 模板。 script 标签上的 id 属性应该是什么?

javascript - 如何在新的 @sentry/node API 中包含标签?

javascript - 更改功能后 Sinon 测试失败

ssl - aws 连接上的 OpenSSL 未知协议(protocol)错误

amazon-web-services - 从另一个帐户 S3 存储桶复制到 Redshift

amazon-web-services - 如何找到 S3 存储桶创建的用户?

javascript - Angular js是否与jquery multiselect不兼容

javascript - 在 Angular 中编辑 JSON 搜索结果

javascript - 我的指令没有触发

node.js - iisnode-IIS7.5 : 405 Method not allowed when performing PUT request