【发布时间】:2019-12-12 16:08:55
【问题描述】:
我有一个 NodeJS 应用程序,它将所有数据(甚至图像)存储到 MongoDB。现在我想使用 S3 来存储我的应用程序的文件(图像,43gb),所以我需要将我在 mongo 中的所有文件传输到那里。
我找到了可以将我的文件传输到 S3 实例(DigitalOcean 空间)的 s3cmd 工具,但我找不到实际访问这些文件的方法。我知道它们存储在fs.files 和fs.chunks 集合中,但我不知道如何实际将它们用作s3cmd 的输入!
任何帮助将不胜感激!!!
编辑:这是存储图像的格式:
fs.files
{
"_id" : ObjectId("5ae97922c1dabec8d2d0bdb0"),
"filename" : "2b57455f3878d11dabc9c984da7de314_postImage.jpeg",
"contentType" : "binary/octet-stream",
"length" : 2291623,
"chunkSize" : 261120,
"uploadDate" : ISODate("2018-05-02T08:38:58.549Z"),
"aliases" : null,
"metadata" : null,
"md5" : "9ad420eaa7c28a73e449199430627802"
}
fs.chunks.findOne()
{
"_id" : ObjectId("5ae2d77f6616b4a9d93cb4b1"),
"files_id" : ObjectId("5ae2d77f6616b4a9d93cb4b0"),
"n" : 0,
"data" : BinData(0,"iVBORw0KGgoAAAANSUhEUgAAAuAAAAJvCAYAAAA6OGQEAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABWWlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNS40LjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRher38tcAAAAASUVORK5CYII=") }
【问题讨论】:
-
您是否尝试将存储在 MongoDB 中的二进制 blob 移动到 S3,或者磁盘上构成 MongoDB 数据库的实际文件(即默认情况下包含在 \data\db 中的文件) ?您可以将数据目录从一个 MongoDB 安装复制到另一个。因此,只需上传文件就足够了。也许我误解了你的问题。
-
我想要的只是从我的 mongo 中获取图像并将它们传输到 S3。我知道 mongo 中的图像是按块存储的,所以我猜是二进制 blob?
-
除非 S3 的某些功能允许它访问您的 MongoDB 并提取字节数组,否则我认为您必须以编程方式执行此操作。我不知道有什么方法可以让 MongoDB 服务器将文档推送到非 mongoDB 目标。
-
好的!然后以编程方式!你知道怎么做吗?
-
我想您会使用 NodeJS 驱动程序来提取数据并通过 S3 SDK aws.amazon.com/sdk-for-node-js 将其推送到 S3
标签: mongodb amazon-s3 digital-ocean gridfs s3cmd