I see. I think the problem is that you have set the writable attribute of 
the filename field to False. In that case, try setting the default value of 
that field:

if request.vars.upload:
    db.fileobject.filename.default = request.vars.upload.filename
form = SQLFORM(db.fileobject)

Anthony

On Friday, December 28, 2012 2:28:53 PM UTC-5, Joe Barnhart wrote:
>
> Hi Anthony --
>
> I want the opposite of this -- I want the original text filename, not a 
> replacement.  The book example I followed did not work.
>
> I found at least one problem -- the test "if request.vars.upload:" does 
> not work.  Even though the upload field has a valid filename, the 
> FieldStorage object returns "False" for the test.  In the book the 
> recommended test was "if request.vars.upload != None" but that was found to 
> have a walkback if the submit button was pressed without choosing a 
> filename, as request.vars.upload returns an empty string in that case.
>
> -- Joe
>
> On Friday, December 28, 2012 2:18:24 AM UTC-8, Anthony wrote:
>>
>> Are you saying you want the name in the "filename" field to be encoded 
>> into the string stored in the "upload" field so the file has the name in 
>> the "filename" field upon download? If so, then try:
>>
>> if request.vars.upload and request.vars.filename:
>>     request.vars.upload.filename = request.vars.filename
>> form = SQLFORM(db.fileobject)
>>
>> That will re-assign the filename of the uploaded file to the value 
>> entered by the user, and web2py will then encode that user-entered filename 
>> into the new filename. Another option is to do nothing upon upload and 
>> instead replace the original filename with the user-entered filename upon 
>> download (which you could do via a custom_retrieve function for the 
>> "upload" field).
>>
>> Note, web2py relies on the filename extension to set the HTTP headers 
>> appropriately upon download, so you may want to add some logic to obtain 
>> the original filename extension in case the user fails to enter it.
>>
>> Anthony
>>
>> On Friday, December 28, 2012 4:15:52 AM UTC-5, Joe  Barnhart wrote:
>>
>>> I'm not sure why this is difficult, but I see many posts about this when 
>>> I search, yet none exactly work for me.  This seems like it should be easy 
>>> but is surprisingly difficult in web2py.
>>>
>>> I want to keep a table of uploaded files with the uploads in a "blob" 
>>> field and the names in clear text in a "filename" field.  Like this model:
>>>
>>> db.define_table("fileobject",
>>>     Field("filename","string",length=50,readable=False,writable=False),
>>>     Field("upload","upload",uploadfield="object_data"),
>>>     Field("object_type","string",length=20,readable=False,writable=False
>>> ),
>>>     Field("object_data","blob"),
>>>     Field("owner","reference auth_user",default=auth.user_id,readable=
>>> False,writable=False),
>>>     Field("saved","datetime",default=datetime.now(),readable=False,
>>> writable=False),
>>>     Field("state","string",length=16,readable=False,writable=False),
>>>     migrate=settings.migrate)
>>>
>>> Reading the relevant posts and the online book lead me to believe the 
>>> way is with a controller like this one:
>>>
>>> def index():
>>>     form=SQLFORM(db.fileobject)
>>>     if request.vars.upload:
>>>         form.vars.filename = request.vars.upload.filename
>>>     if form.process().accepted:
>>>         response.flash = 'form accepted'
>>>     elif form.errors:
>>>         response.flash = 'form has errors'
>>>     return dict(form=form)
>>>
>>> And yet this controller does not work.  The blob is filled in but the 
>>> filename is ignored and shows in the table as "None".  In fact, form.vars 
>>> is an empty collection and placing form.vars.filename in it does not 
>>> produce an error, but it is ignored by the form processing.  In addition to 
>>> the filename, I'd like to add the information about the object type etc. at 
>>> the same point in the process, i.e. after the file has been chosen but 
>>> before it has been loaded into the database.
>>>
>>> I've been trying to scan through the code (I'm using 2.3.2 source) to 
>>> answer my own questions about the upload field but it's just taking too 
>>> much time.  The upload field is one of those parts of web2py that you 
>>> either love or... uh... don't.  To me it seems designed for a very specific 
>>> use model.  If my use model deviates too much then using "upload" is like 
>>> pounding square pegs into round holes.  I'm tired of pounding.  Someone 
>>> show me how to whittle off the corners of my square peg!
>>>
>>> (You would think this would be an easy task, yet from the number of 
>>> posts on this exact topic I know I'm in the company of a large number of 
>>> others.)
>>>
>>>
>>>

-- 



Reply via email to