在AWS CloudFront中为文件名使用别名

时间:2017-11-24 06:15:39

标签: amazon-web-services amazon-s3 amazon-cloudfront

CloudFront存储已调整大小的图像版本并将其提供给公众。每个图像都以严格的方式存储和提供:

/content/resized/2x/md5_hash_of_image.jpg

唯一的变化是2xmd5_hash_of_image

此外,包含访问密钥的查询字符串将附加到请求中。

但是,我想以这种格式提供图像: /images/2x/md5_hash_of_image/random_friendly_filename.jpg

服务器即时生成random_friendly_filename

这可能与CloudFront有关,例如自定义行为吗?

1 个答案:

答案 0 :(得分:1)

CloudFront没有本机功能,但可以在CloudFront中使用Lambda@Edge的帮助来完成,它允许使用JavaScript操纵CloudFront请求(和响应)。

'use strict';

exports.handler = (event, context, callback) => {
    const request = event.Records[0].cf.request;
    request.uri = request.uri.replace(/\/[^\/]+\.jpg$/,'.jpg');
    return callback(null, request);
};

这会获取uri(路径),并仅使用/random-friendly-filename.jpg替换最终的.jpg,从而删除您之前的random-friendly-filename/

如果对于任何一个特定图像,random-friendly-filename始终相同,则这将是原始请求触发器。如果随机友好名称即使基本图像哈希值相同也会更改,那么您需要将其作为查看者请求触发器。