2011-12-16 4 views
0

Мне интересно, какой правильный способ загрузки изображения на S3 и сохранения документа изображения в mongodb.сохранить изображения на s3 и сохранить соответствующий объект на mongodb?

логики я реализовал до сих пор это:

  • пользователя загружает изображение через форму (nodejs)
  • файл изображения сохраняются в S3
  • в то же время я генерировать документ изображения, который также имеет URL-адрес изображения, который был загружен на S3

Все работает хорошо, но я хочу иметь возможность использовать идентификатор объекта документа mongodb, чтобы назвать изображение, загруженное затем на S3.

Так как я могу получить ObjectId от изображения дока MongoDB так, то я могу использовать ObjectID назвать изображение, то Линк: 03scc8399n39n.png

Проблемы заключается в том, что пока я не сохранить документ изображения в MongoDB У меня нет объектаId, поэтому это значит, что я должен сделать что-то вроде: - сохранить документ изображения в mongodb - найти его - получить уникальный объект Изначально, извлекая документ только что сохраненный на манго и прочитав его идентификатор - используйте id, чтобы называть изображение - обновите изображение doc с адресом, загруженным только на S3

Проблема в том, что мне нужно сохранить, найти-обновить, сохранить документ в 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(), как вы объяснили, что поле _id теперь имеет идентификатор mongodb, назначенный объекту, поэтому я могу использовать его для обозначения изображения. – zumzum

Смежные вопросы