以不区分大小写的方式从s3访问图像

use*_*745 12 amazon-s3 express

我在node.js中使用express,它以不区分大小写的方式提供静态图像,但当我移动到s3时,我发现图像区分大小写.

亚马逊s3有什么办法以不区分大小写的方式提供静态文件(图像)吗?任何配置?否则,我最好的选择是将图像转换为小写,然后再将它们转换为s3.

UPDATE

另一个问题,c ++.jpg不是由s3渲染的,它需要转换为c%2B%2B.jpg.然而,c ++.jpg通过express呈现为魅力.这里有解决方法吗?

小智 18

不,S3上的文件名区分大小写.据推测,这是对底层linux/unix文件系统的限制.

我总是建议人们只上传小写的文件名.


Han*_*med 5

AWS 现在引入了 lambda Edge。您可以将域(您正在使用的 s3 的主机名)指向 Cloudfront,将您的 s3 存储桶配置为后端并将 lambda Edge 函数附加到 Cloudfront。

选择查看器请求事件以触发 lambda 函数。lambda 中的以下 nodejs 代码会将 cloudfront 收到的所有请求转换为小写,并将其传递到后端 s3 存储桶。下面的代码对我有用。

exports.handler = (event, context, callback) => {
    // TODO implement

   const request = event.Records[0].cf.request;
   console.log (request)
   request.uri = request.uri.toLowerCase()
   console.log (request.uri)
   callback(null, request)

};
Run Code Online (Sandbox Code Playgroud)

工作流程如下所示。

请求(混合大小写的uri)--> cloudfront-->(Lambda函数将uri更改为小写)--> s3(一旦收到请求,uri将变为小写)