Re: Zope File Library help
I came across your email in a zope archive. I am new to zope and am trying to do something similar. Actually, something that the example file library in zope does for the most part. I just want a directory where people can upload files and down load them. Make changes, and put them back. The example works great until you try to upload a file that is already there. It only works to add a new file. I have spent at least a day trying to figure out exactly how to change the manage_addFile to something that would just overwrite the existing file without any luck. Did you find a solution? Do you have an idea? I have looked at manage_upload and have not figured out how to make it work.
...
The code for the add script is """ Adds a file to the library. """ from Products.PythonScripts.standard import url_quote
# create the file container.Files.manage_addProduct['OFSP'].manage_addFile(id='', title='', file=file)
# create a success message message="File '%s' uploaded successfully." % file.filename
# redirect to main page - this is necessary to make all the URLs # on the main page work correctly. return context.REQUEST.RESPONSE.redirect("%s?message=%s" % (container.absolute_url(), url_quote(message)))
I'm kind of suspicious of the empty string as an id, but assuming that makes the id equal to file.filename, then how about:: if container.Files[file.filename]: container.Files.manage_delObjects([file.filename]) container.Files.manage_addProduct['OFSP'].manage_addFile(id='', title='', file=file) or, a little more elegantly:: obj = container.Files[file.filename] if obj is not None: obj.update_data(file) else: container.Files.manage_addProduct['OFSP'].manage_addFile(id='', title='', file=file) Where did I find those methods, you ask? Zope Help System > API > File, ObjectManager is all I needed. Also, I'm copying this to the list, so that others can see. It's probably best to send things to the list, too. I might have been on vacation or hit by a bus or something. --jcc fyi, the second example can probably be shortened to:: if obj = container.Files[file.filename]: obj.update_data(file) else: container.Files.manage_addProduct['OFSP'].manage_addFile(id='', title='', file=file) -- "My point and period will be throughly wrought, Or well or ill, as this day's battle's fought."
fyi, the second example can probably be shortened to::
if obj = container.Files[file.filename]:
nope, python doesn't allow that
Hm. Good. I always thought that was too magical. Probably should have tested ere writing. --jcc -- "My point and period will be throughly wrought, Or well or ill, as this day's battle's fought."
participants (2)
-
J Cameron Cooper -
Jamie Heilman