在s3上保存图像并在mongodb上保存相应的对象?

时间:2011-12-16 20:40:18

标签: mongodb node.js amazon-s3

我想知道将图像上传到S3并将图像文档保存为mongodb的正确方法是什么。

到目前为止我实施的逻辑是:

  • 用户通过表单(nodejs)上传图片
  • 图像文件保存到S3
  • 同时我生成的图像文档也将图片网址上传到S3

一切正常,但我希望能够使用mongodb doc的objectID命名图像,然后上传到S3。

那么如何获取mongoDB图像文档的objectID,然后我就可以使用objectid来命名图像了,某些内容为:linke:03scc8399n39n.png

问题是,直到我在mongodb中保存图像文档,我没有objectId所以这意味着我必须做以下事情: - 在mongodb中保存图像文档 - 找到它 - 通过获取刚刚保存在芒果上的文档并读取其id来获取唯一的objectId - 使用id命名图像 - 使用刚刚上传到S3的图像的网址更新图像文档

这个问题是我必须保存,查找 - 更新,保存mongodb中的文档,而不是仅仅创建对象并将其保存到mongodb ...我想我不会以最好的方式接近它由于我的经验不足。

在S3上存储图像,在mongodb中跟踪它们并使用doc id作为图像名称的更好方法是什么?

由于

1 个答案:

答案 0 :(得分:1)

在保存文档之前,您确实拥有_id值。所有驱动程序的工作方式是,在执行保存之前,它们会添加新创建的ObjectID实例并将其分配给文档的“_id”字段。换句话说,如果为保存的文档提供_id值,则保存命令实际上是更新,如果不是,则只是插入新创建的ObjectID实例。

因此,你所要做的就是(伪):

myImageDoc = new ImageDoc();
imageId = new ObjectID();

myImageDoc._id = imageId;
db.images.save(myImageDoc);

myPng = imageId + ".png";

或(因为大多数驱动程序使用_id值设置扩展文档实例):

myImageDoc = new ImageDoc();

db.images.save(myImageDoc);
imageId = myImageDoc._id;

myPng = imageId + ".png";

我不是JavaScript专家,所以你必须酌情将其翻译成该语言。