【问题标题】:using aws-sdk to upload images to s3 using nodejs使用 aws-sdk 使用 nodejs 将图像上传到 s3
【发布时间】:2016-01-30 13:27:27
【问题描述】:

我想将图像上传到亚马逊网络服务器,为此我正在使用带有 nodejs 的 aws-sdk。

我可以将图像上传到 s3 存储桶,但是当我单击 URL 访问它们时,我收到拒绝访问错误。

这是我的配置

     var AWS = require('aws-sdk');

     //aws credentials
     AWS.config = new AWS.Config();
     AWS.config.accessKeyId = "<access_key>";
     AWS.config.secretAccessKey = "<secret_key>";
     AWS.config.region = "ap-southeast-1";
     AWS.config.apiVersions = {
        "s3": "2006-03-01"
     }

    var s3 = new AWS.S3();

    var bodystream = fs.createReadStream(req.files.pic.path);

    var params = {
        'Bucket': '<bucket_name>',
        'Key': 'uploads/images/' + req.files.pic.name,
        'Body': bodystream,
        'ContentEncoding': 'base64', 
        'ContentType ': 'image/jpeg'
     };

     //also tried with s3.putObject
     s3.upload(params, function(err, data){
        console.log('after s3 upload====', err, data);
     }) 

图片上传成功,但它们的内容类型是应用程序/八位字节。另外我认为存在一些权限问题,因为当我添加新权限时,我可以下载图像但看不到它。

你能告诉我这个配置有什么问题吗?我也想知道 s3.upload 和 s3.putObject 方法之间的区别。

【问题讨论】:

    标签: node.js amazon-web-services amazon-s3


    【解决方案1】:

    为了指定Content-Type 标头,您需要定义Metadata 部分:

    var params = {
        'Bucket': '<bucket_name>',
        'Key': 'uploads/images/' + req.files.pic.name,
        'Body': bodystream,
        'ContentEncoding': 'base64', 
        Metadata: {
            'Content-Type': 'image/jpeg'
        }
    
     };
    

    【讨论】:

    • 如果我尝试以这种方式指定内容类型{ [SignatureDoesNotMatch:我们计算的请求签名与您提供的签名不匹配,则会收到此错误。检查您的密钥和签名方法。] 消息:'我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法。',代码:'SignatureDoesNotMatch',时间:2015 年 10 月 30 日星期五 12:55:30 GMT+0530 (IST),状态代码:403,可重试:假,重试延迟:30 }
    • @BhushanGoel 我已经修复了代码,忘记了content-type中的破折号
    • 是的,它有效,现在在 s3 控制台中我可以在元数据中看到:x-amz-meta-content-type: image/png
    • 但是如何设置权限,我仍然收到拒绝访问错误
    • @BhushanGoel 您可以使用putObject 并在此处指定ACL,也可以使用putBucketAcl 单独设置ACL
    猜你喜欢
    • 1970-01-01
    • 2015-04-18
    • 2016-03-19
    • 2018-03-02
    • 2021-01-01
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多