сохранить изображения на s3 и сохранить соответствующий объект на mongodb? - PullRequest
0 голосов
/ 17 декабря 2011

Мне интересно, как правильно загрузить изображение на S3 и сохранить документ с изображением в mongodb.

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

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

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

Так, как я могу получить objectID документа изображения mongoDB, чтобы я мог использовать объект для имени изображения, что-то вроде linke: 03scc8399n39n.png

Проблема в том, что пока я не сохраню изображение документа в mongodb, у меня нет objectId, поэтому это значит, что мне нужно сделать что-то вроде: - сохранить документ с изображением в mongodb - Найди это - получить уникальный идентификатор объекта, выбрав документ, только что сохраненный в манго, и прочитав его идентификатор - используйте идентификатор, чтобы назвать изображение - обновить документооборот с URL-адресом изображения, только что загруженного на S3

Проблема в том, что мне нужно сохранить, найти-обновить, сохранить документ в mongodb, вместо того, чтобы просто создать объект и сохранить его в mongodb ... Я думаю, что я не подхожу к этому наилучшим образом из-за моей неопытности.

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

Спасибо

1 Ответ

1 голос
/ 17 декабря 2011

Перед сохранением документа у вас действительно есть значение _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, поэтому вам придется переводить его на соответствующий язык.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...