生成“虚拟托管样式”格式的S3 URL

时间:2019-11-24 14:53:27

标签: amazon-web-services amazon-s3 aws-lambda pre-signed-url

我正在AWS Lambda上使用Javascript SDK生成签名URL。但是getSignedUrl仅返回路径样式 URL。我尝试将s3ForcePathStyle设置为false。

const params = {
    Bucket: 'bucket_name',
    Key: 'key_name'
};

const options = {
    signatureVersion: 'v4',
    useAccelerateEndpoint: false,
    // endpoint: new AWS.Endpoint('https://bucket_name.s3.amazonaws.com'),
    s3ForcePathStyle: false 
};

const client = new AWS.S3(options);
exports.handler = async (event) => {

    const signedURL = await (new Promise((resolve, reject) => {
        client.getSignedUrl('putObject', params, (err, data) => {
            if (err) {
                reject(err);
            } 
            else {
                resolve(data);
            }
         });
    }));
    return signedURL;
};

如果我取消注释endpoint: new AWS.Endpoint('https://bucket_name.s3.amazonaws.com'),那么我将得到一个荒谬的网址,其中包含以下两者:

https://bucket_name.s3.amazonaws.com/bucket_name/key_name......

tl; dr

https://s3.ap-south-1.amazonaws.com/bucket_name/key_name..... # Code returns path-style
https://bucket_name.s3.amazonaws.com/key_name..... # I want virtual-hosted-style

0 个答案:

没有答案