获取存储在 s3 中的文件的正确 createdAt 和 modifiedAt 日期

Posted

技术标签:

【中文标题】获取存储在 s3 中的文件的正确 createdAt 和 modifiedAt 日期【英文标题】:Get Correct createdAt and modifiedAt date for a file stored in s3 【发布时间】:2018-01-26 03:34:13 【问题描述】:

我在 s3 中存储的文件很少,我必须找出文件的确切创建日期。下载文件后,会立即为该文件生成新的created_at 时间戳,但是当我在 excel 或 pdf 中打开它时,我能够看到正确的 created_at 时间戳。

我正在使用 node.js 从 s3 获取文件,并且需要一些库来将这些日期提供给我。

我已经尝试过xslxfswinattraws-sdk

【问题讨论】:

考虑一下,如果它们是特定类型的文档,例如 pdf 和 xlsx,那么原始 created_at 统计信息可能会存储在这些文件本身中,而不是作为文件元数据。你可能需要解析你的 pdf/excel 文档来做你想做的事情。我的回答可能无法满足您的需求。 你是对的,你能提供一些东西来解析docx文件元数据吗? 【参考方案1】:

对于本地文件,例如下载文件后,您可以使用 Node JS fs.stat 函数。

这将为您提供文件统计信息/元数据详细信息,因为它们由您运行 node.js 的操作系统存储。

见https://nodejs.org/api/fs.html#fs_fs_stat_path_callback

如果您要查找在 Amazon S3 上创建文件的日期,则可以使用 Object HEAD 休息请求。

有关更多信息,请参阅Amazon S3 Object HEAD Documentation。

Last-Modified 似乎是对象的最后修改或创建日期,以最后发生的为准。这可能会为您提供所需的粒度。如果没有,您可能可以将 HEAD 命令与版本控制命令结合使用来确定创建日期。找到第一个版本,然后获取创建日期的第一个版本的 Last-Modified。

更多详情请参阅Amazon S3 Object HEAD Versioning。

PDF 文件将其访问、创建等元数据属性作为其格式的一部分在内部存储。您可以使用https://github.com/Gottox/node-pdfutils 解析这些详细信息

Excel 文件和大多数 Microsoft 文档执行类似操作,您也许可以使用 https://www.npmjs.com/package/xlsx 读取工作簿的 created 属性

【讨论】:

感谢node-pdfutils,但我已经尝试了其他所有方法,包括 fs 和 head 请求,我知道它们为什么不起作用。 一个 S3 HEAD 对象请求返回一个 Last-Modified 标头,如此命名是为了与标准 HTTP 行为保持一致。这实际上是对象写入 S3(“创建”)的日期/时间,因为 S3 对象是不可变的,并且在上传到存储桶后实际上无法“修改”。实际上,更新对象元数据并不会更新元数据,而是用其自身的副本以及新的元数据覆盖对象。这会将Last-Modified 设置为“现在”,但实际上并未对其进行修改——从技术上讲,它是一个新对象,在 S3 中具有新的创建日期,是旧对象的副本。 OP 的有用信息就在那里。我从未使用过 Amazon S3,我只是离开了文档。 @DileepChirumamila 以 .*x 结尾的 Microsoft 文档格式,例如.docx 或 .xlsx 为 XML 格式。最坏的情况,在记事本应用程序中打开文档,找到具有创建日期的节点,然后使用 XML 解析器手动将其解析出来。

以上是关于获取存储在 s3 中的文件的正确 createdAt 和 modifiedAt 日期的主要内容,如果未能解决你的问题,请参考以下文章

如何获取使用 Cloudfront 上传的 S3 存储桶中的文件?

如何使用 AWS 胶水获取存储在 s3 中的模式或已处理的嵌套 json 文件压缩(gzip)?

将存储在内存中的文件上传到s3

使用 boto3 lib 和 AWS Lambda 从 S3 存储桶中的压缩文件中获取数据流

使用 Spring 集成轮询 S3 存储桶以获取文件

在 AWS Lambda 函数中从 S3 获取对象并发送到 Api Gateway