问题描述: 我有一个包含大量zip文件的Amazon S3存储桶,并希望使用Amazon CloudFront将这些zip文件分发到用户。但是,我遇到了一个问题,当用户尝试下载这些zip文件时,他们收到的文件是一个名为“download.zip”的文件,而不是原始zip文件的名称。
解决方法: 要解决这个问题,您需要在Amazon CloudFront中配置一个Lambda@Edge函数来重写请求和响应。以下是一个使用Node.js编写的示例代码,可以实现这一点:
'use strict';
exports.handler = (event, context, callback) => {
const request = event.Records[0].cf.request;
const response = event.Records[0].cf.response;
if (request.uri.endsWith('.zip') && response.status === '200') {
const originalFilename = request.uri.substring(request.uri.lastIndexOf('/') + 1);
const newFilename = decodeURIComponent(originalFilename);
response.headers['content-disposition'] = `attachment; filename="${newFilename}"`;
}
callback(null, response);
};
您可以将此代码保存为一个Lambda函数,并将其与Amazon CloudFront的行为关联。然后,在Amazon CloudFront控制台上,选择您的分发并转到“行为”选项卡。选择“默认行为”并在“Lambda函数关联”下拉菜单中选择您的Lambda函数。
这样,当用户尝试下载zip文件时,他们将收到带有原始zip文件名的文件,而不是“download.zip”文件。
请注意,这只是一个示例代码,您可能需要根据您的特定需求进行更改和优化。此外,您还可以根据需要使用其他编程语言编写Lambda函数。
上一篇:Amazon S3公共数据集通知