2012-03-05 4 views
3

Я пишу cms как приложение, и я хотел бы, чтобы мои изображения сохранялись как вложения в couchdb. Проблема заключается в именовании вложений, потому что я не хочу, чтобы мои изображения назывались одинаковыми (например, /db/doc_id/thumb.jpg)couchdb, как переименовать приложение

Идеальные имена вложений должны зависеть от поля doc.name. Для выполнения этой работы мне пришлось бы переименовывать вложение каждый раз, когда пользователь менял имя (описание | alt) текущего фото документа.

Так что мой вопрос: как изменить имя вложения? или, может быть, я должен пойти другим путем в решении моей проблемы?

ответ

2

Шимона,

Я хотел бы предложить с учетом использования UUID, для названий документов и сохранение вложения как-то «статические», как «оригинальный», «большой палец» , «300 по всему миру» и т. Д. Имя, указанное пользователем при загрузке файла, может быть сохранено в виде ключа, и вы можете использовать индекс MapReduce для получения изображения/файла с использованием этого имени позже.

Если вы идете по этому маршруту, вам придется столкнуться с проблемой «дубликатов» несколько иначе - так как вы можете легко загрузить одно и то же изображение несколько раз с тем же именем, предоставленным пользователем, и будет нет конфликта.

В зависимости от того, что вы строите, пользователь делает уникальное имя, как правило, неразумным - Flickr (среди многих других), например, не работает.

Если вам действительно нужно сделать doc_id == имя, данное пользователем, тогда было бы разумно хранить вложения под статическими именами, поэтому вам не нужно обновлять имя вложения.

Наконец, если вы чувствуете, что действительно хотите изменить имя вложения (и, конечно же, есть случаи, когда вам нужно), самый простой способ - установить приложение из старого местоположения (или с документа), PUT it as новое имя и УДАЛИТЬ вложение со старым именем.

Надеюсь, что это поможет!

+0

Не требуется ли для последовательности GET/PUT/DELETE тип mime вложения для ПУТЬ? Как я получу это? (Единственный способ, которым я знаю, - получить документ и посмотреть свойства заглушки приложения в поле _attachments, но это слишком много накладных расходов, если есть много вложений.) –

+0

Если вы знаете имя вложения , вы можете использовать запрос HEAD для получения своего типа mime. Если вы этого не сделаете, вы можете использовать MapReduce для создания индекса всех _attachments и их mime-типов. Затем используйте результаты этого в качестве основы для запуска GET/PUT/DELETE. – BigBlueHat

0

Используйте эту команду>

curl -v http://localhost:5984/database/DocumentID/OldFileName?rev=RevisionID -X MOVE -H "Destination: NewFileName" 
+1

MOVE был только ненадолго поддержан CouchDB и удален до того, как был выпущен 0.9: http://wiki.apache.org/couchdb/HTTP_Document_API#MOVE – BigBlueHat

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