Why are you using the custom store and retrieve methods? Note, looks like 
you might be vulnerable to a directory traversal attack (depending on 
whether you're validating the "filename" argument passed to the retrieve 
function).

Anthony

On Friday, February 14, 2014 5:21:40 AM UTC-5, Luca Guerrieri wrote:
>
> Goodmorning people,
> I'm teaching myself web2py and I've a little question for understanding 
> how can i do ...
>
> I've a form (becomes from a table) with an upload field
> i would to upload an html file and I would to parse it in the mean time .. 
> or just after the completition of the operation...
>
> eg.: after i've clicked on the submit button so i would import the file 
> and after the parsing filling a new table with the results of the html 
> parse operation.
>
> my table :
>
> db.define_table("files",
>                 Field("name", unique=True),
>                 Field('country', requires=IS_IN_DB(db, 
> 'country.printable_name')),
>                 Field("files", "upload", custom_store=store_file, 
> custom_retrieve=retrieve_file)
>                 )
>
> I used (thanks to web2py group experts) these two function for storing and 
> renaming the file uploaded :
>
> def store_file(file, filename=None, path=None):
>     path = "applications/myappuploads"
>     if not os.path.exists(path):
>          os.makedirs(path)
>     pathfilename = os.path.join(path, filename)
>     dest_file = open(pathfilename, 'wb')
>     try:
>             shutil.copyfileobj(file, dest_file)
>     finally:
>             dest_file.close()
>     return filename
>
> def retrieve_file(filename, path=None):
>     path = "applications/myapp/uploads"
>     return (filename, open(os.path.join(path, filename), 'rb')) 
>
> after I've connected in my display_form()  all the things ...
>
> def display_form():
>     if len(request.args):
>         form=SQLFORM(db.files, request.args[0], upload=URL("download"))
>     else:
>         form=SQLFORM(db.files, upload=URL("download"))
>     txt_content=[]
>     if form.process(onvalidation=validate).accepted:
>         content=StringIO.StringIO(data)
>         msg = process_file(content)
>         response.flash = T(msg)
>     elif form.errors:
>         response.flash = T('some errors occurred')
>     else:
> pass
>     return {"form":form}
>
> I validate the uploaded file giving the name that i've put in the field 
> "name"
>
> def validate(form):
>     if form.vars.files is not None:
>         form.vars.files.filename = form.vars.name + ".html"
>
> and my process_file is : 
>
> def process_file(content):
>     all_lines = content
>     msg = 'content not processed'
>     for line in all_lines:
>         try:
>             msg = 'processed succesfully'
>         except:
>             msg = 'error processing'
>     return msg
>
> here i've my problems .... in which way I can parse the html file, with 
> which html parser ?
>
> Thank you in advance 
> Luca
>
>
>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to