2011-12-16 55 views
0

我在想什么是将图像上传到S3并将图像文档保存在mongodb中的正确方法。在s3上保存图像并在mongodb上保存相应的对象?

我到目前为止实现的逻辑是这样的:

  • 用户上传的图像通过一个形式(的NodeJS)
  • 的图像文件是在同一时间,我生成保存到S3
  • 一个图像文件,也有图像url上传到S3

一切运作良好,但我希望能够使用mongodb文档的objectID命名图像,然后上传到S3。

所以,我怎么能得到MongoDB的图像文档的的objectID所以后来我可以使用OBJECTID命名的图片,一些临客:03scc8399n39n.png

的问题是,直到我保存在MongoDB中的图像文档我没有OBJECTID这样的话是否意味着我必须做一些事情,如: - 保存图像文件在MongoDB中 - 找到它 - 通过获取只是保存在芒果的doc和读取其ID获得独特的OBJECTID - 使用id来命名图像 - 只需上传到S3

图像的URL更新图像文档

这个问题是我必须保存,查找更新,将文档保存在mongodb中,而不是仅仅创建对象并将其保存到mongodb中......我想我没有以最好的方式来处理这个问题我缺乏经验。

什么是S3存储图像,MongoDB中跟踪他们,并使用文档ID作为图像名称的更好的办法?

谢谢

回答

1

在保存文档之前,实际上确实有_id值。所有驱动程序的工作方式是在执行保存之前,他们添加新创建的ObjectID实例并将其分配给文档的“_id”字段。换句话说,如果你为保存的文档提供一个_id值,那么save命令实际上是一个更新,如果你不这样做,它只是一个带有新创建的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"; 

我m不是JavaScript专家,因此您必须根据需要将其翻译为该语言。

+0

工作。谢谢。我使用.save()保存图像对象,使用.save()然后就像你解释的_id字段现在有id mongodb分配给对象,然后我可以用它来命名图像。 – zumzum 2011-12-16 22:08:20