I’m writing cms like application and I would like my images to be stored as attachments in couchdb.
The problem is in naming the attachments because I don’t want my images to be named the same (e.g. /db/doc_id/thumb.jpg)
Ideally attachments names should depend on doc.name field. To make this work I would have to rename attachment each time user changed the name (description|alt) of current photo document.
So my question is: how to change attachment name? or maybe I should go other way in solving my problem?
Szymon,
I’d suggest considering using UUIDs for the document names, and storing the attachment as something “static” like “original”, “thumb”, “300wide”, etc. The name given by the user when they upload the file can be stored as a key, and you can use a MapReduce index to retrieve the image/file using that name later.
If you go that route, though, you’ll have to come at the “duplicates” problem a bit differently–as you could easily upload the same image multiple times with the same user-provided name and there would be no conflict.
Depending on what you’re building, though, making the user provide a unique name is generally unwise–Flickr (among many others) doesn’t, for instance.
If you really do need to make the doc_id == the name given by the user, then it would still be wise to store the attachments under static names, so you don’t have to update the attachment name.
Lastly, if you feel you really must change the attachment name (and there are certainly cases where you need to), the simplest way is to GET the attachment from the old location (or with the document), PUT it as the new name, and DELETE the attachment with the old name.
Hope that helps!