[Zope] Yet another newbie question (file upload and python scripts)

Dieter Maurer dieter at handshake.de
Sat Jan 28 16:43:04 EST 2006


Janusz Zamecki wrote at 2006-1-28 10:30 +0100:
>Hi, after googling and RTFM I have no other option but ask you for help.
>
>I have the following DTML document:
>
><dtml-var standard_html_header>
><form action=3D"checkTheFile" method=3D"post" enctype=3D"multipart/form-d=
>ata">
>Select the file:
><input type=3D"file" name=3D"the_file">
><input type=3D"submit" name=3D"go" value=3D"Next >>">
></form>
><dtml-var standard_html_footer>
>
>
>And here is the checkTheFile python script:
>## Script (Python) "checkTheFile"
>##bind container=3Dcontainer
>##bind context=3Dcontext
>##bind namespace=3D
>##bind script=3Dscript
>##bind subpath=3Dtraverse_subpath
>##parameters=3D
>##title=3D
>##
># Import a standard function, and get the HTML request and response objec=
>ts.
>from Products.PythonScripts.standard import html_quote
>request =3D container.REQUEST
>RESPONSE =3D  request.RESPONS
>
>
>filename=3Dhtml_quote(request.form['the_file'].filename)
>context.fs.rpt.manage_addFile(filename, request.form['the_file'],
>content_type=3D"text/xml")
># the next line does'n work:
>file_content=3Drequest.form['the_file'].read()
># EOF
>
>I need to temporary save uploaded file then I have to validate it. But
>I've received the following error message:
>
>Site error:
>Error Type: AttributeError
>Error Value: read

Whenever you get an "Error", you should look at the traceback (to
be found in your "error_log" in the Zope "Root Folder").
It tells you where the error occurred.


The code you show above should not result in an "AttributeError: read".

However, it has some other problems:

  *  "manage_addFile" has read the uploaded file; after the call,
     it is positioned at its end.
     Your "read" will therefore always return ''.

     You should call a "seek(0)" before you try to read the file again.

  *  Your code is less well readable than possible.
     This could be improved by a definition
     "file = request.form['the_file']" and than using "file"
     rathen than "request.form['the_file']" over and over again.


-- 
Dieter


More information about the Zope mailing list