Amazon S3 获取没有扩展名的文件

Posted

技术标签:

【中文标题】Amazon S3 获取没有扩展名的文件【英文标题】:Amazon S3 get file without extension 【发布时间】:2016-12-05 05:32:40 【问题描述】:

我正在通过 java Amazon TransferManager 上传多张具有不同扩展名(jpg、png...等)的图片。

例如:picture1.png、picture2.jpg。 我想提供不带扩展名的内容,对文件夹/图片1 的获取请求将返回图片1.png。

客户端是一个angularJs应用

以前,我在 EC2 上托管所有这些图片并通过 APACHE 和选项 Multiviews 提供服务,我们可以用 AmazonS3 做类似的事情吗?

谢谢

【问题讨论】:

【参考方案1】:

这样不行。 S3 不会对对象键的任何部分(路径+文件名)赋予特殊含义,因此它没有“扩展”的概念。 (从技术上讲,S3 也没有真正的“路径”概念,但在大多数情况下它的行为就好像它确实如此)。

当然,在网络上,文件扩展名无论如何都应该没有意义——声明的Content-Type 应该是唯一重要的东西,所以...从技术上讲...不需要保存 S3 中的对象与他们的扩展。

将文件保存到不带扩展名的 S3,正确设置 Content-Type,您将获得您正在寻找的行为。

【讨论】:

迈克尔,感谢您清晰准确的回答。我确实搜索了更多,最终找到了相同的解决方案。【参考方案2】:

您可以做的是像这样列出 aws s3 文件夹中的所有文件

const files = await s3Bucket.listObjects(params).promise()

您可以浏览每个文件并将其与您的文档和您想要做的事情相匹配。

 files.Contents.forEach(function(obj,index)
                    obj.Key //
                )

您现在可以使用此 obj.Key 访问您的文件。 obj.Key 是带有扩展名的文件的完整路径。您可以搜索此字符串或将其与您的文件匹配,然后获取文件。

【讨论】:

以上是关于Amazon S3 获取没有扩展名的文件的主要内容,如果未能解决你的问题,请参考以下文章

我可以更新现有的 Amazon S3 对象标头属性吗?

使用 AWS SDK for PHP 上传的 Amazon S3 文件总是“application/octet-stream”?

有没有人达到过 Amazon S3 存储桶的读取或写入上限?

有没有办法为 kinesis firehose 保存到 s3 的文件指定文件扩展名

asp.net core系列 69 Amazon S3 资源文件上传示例

使用 Filesystem Laravel 5.2 从 amazon s3 获取文件的签名 URL