将图像上传到S3并检索图像的唯一URL

时间:2017-02-03 04:26:49

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

我使用以下代码将3张不同的图片上传到S3:

AWS.config.update({
    accessKeyId: accessKeyId,
    secretAccessKey: secretAccessKey
});

const s3Stream = require('s3-upload-stream')(new AWS.S3())

function getUploadStrm() {

    return s3Stream.upload({
        Bucket: awsS3Bucket,
        Key: accessKeyId,
        ACL: 'public-read',
        StorageClass: 'REDUCED_REDUNDANCY',
        ContentType: 'binary/octet-stream',
    });
}

(我创建了3个上传流并分别写入每个流)。

这是我得到的信息:

detail =>  { Location: 'https://staging-media-assets.s3.amazonaws.com/AKIAIRNYI65C5VKWDEDQ',
  Bucket: 'staging-media-assets',
  Key: 'AKIAIRNYI65XC5VKWDEDQ',
  ETag: '"d7165b042c4068477d03341ca75x518e1-1"' }

detail =>  { Location: 'https://staging-media-assets.s3.amazonaws.com/AKIAIRNYI65C5VKWDEDQ',
  Bucket: 'staging-media-assets',
  Key: 'AKIAIRNYI65XC5VKWDEDQ',
  ETag: '"e325f4cb98e4af408e60e421e37xa4a27-1"' }

detail =>  { Location: 'https://staging-media-assets.s3.amazonaws.com/AKIAIRNYI65C5VKWDEDQ',
  Bucket: 'staging-media-assets',
  Key: 'AKIAIRNYI65XC5VKWDEDQ',
  ETag: '"8a04422756e20eb9f93718422fx11dad8-1"' }

我的问题是 - 如何根据返回的信息找到上传图片的网址?

S3网站上的信息对我来说并不清楚:

http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#createMultipartUpload-property

1 个答案:

答案 0 :(得分:1)

鉴于这些响应,您似乎每次都使用相同的Key值,因此您每次都会在S3上覆盖该文件。您似乎将AWS Access密钥作为S3密钥传递,这是不正确的。 S3键是要上载的对象的唯一ID。您需要在传递给key的参数中为s3Stream.upload()指定唯一值。您获得的Location值将是S3上文件的URL。