获取存储在 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 获取文件,并且需要一些库来将这些日期提供给我。
我已经尝试过xslx
、fs
、winattr
和aws-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)?