This is great - works perfectly. 

Thanks again for all the help!
j

On Wednesday, October 16, 2013 8:46:46 AM UTC-7, Anthony wrote:
>
> Sorry, turns out the filename stored in the db must be the *last* URL 
> argument, not the first -- so the order of the URL args should be reversed. 
> Actually, there are some limitations regarding characters allowed in URL 
> args, so it might be a better idea to put the new filename in the query 
> string (i.e., a URL variable):
>
> URL('default', 'download', args=download_path, vars=dict(filename=
> 'new_title'))
>
> The download function would then be:
>
> def download():
>     return response.download(request, db, download_filename=request.vars.
> filename)
>
> And yes, the new file name will appear in the URL -- that's how it is 
> communicated to the download function.
>
> Anthony
>
> On Wednesday, October 16, 2013 11:31:49 AM UTC-4, Jordan Ladora wrote:
>>
>> Hi Anthony,
>>
>> Thanks for the help.
>>
>> The download_path variable doesn't change regardless of whether the 
>> download() function includes, or is passed, the 'download_filename' arg. 
>> Indeed, the file downloads successfully when the download function is the 
>> default, ie -
>>
>> def download():
>>     return response.download(request, db)
>>
>> ..and when download() is called with just this one arg -
>>
>> <td>{{=A('Download', _href=URL('default', 'download', 
>> args=download_path))}}</td>   
>>
>>
>> When I added the second parameter to the call to download()-
>>
>> <td>{{=A('Download w title', _href=URL('default', 'download', 
>> args=[download_path, 'new_title']))}}</td>   
>>
>> ..I changed the download() function in the default controller to this-
>>
>> def download():
>>     return response.download(request, db, attachment=True, 
>> download_filename=request.args(1))
>>
>>
>> The db field from the model looks like this-
>>     Field('file', 'upload', length=128, autodelete=True, 
>> requires=IS_NOT_EMPTY()), 
>>
>>
>> It might be most telling to show the links that are generated in the 
>> view.. the [working] link for -
>> <td>{{=A('Download', _href=URL('default', 'download', 
>> args=download_path))}}</td>   
>>
>> ..looks like:
>>
>> http://127.0.0.1:8000/test_app/default/download/main_db.file.b36e427143f2c727.64633532346236612d373033622d343235352d383330302d616362613637366136396262.txt
>>
>>
>> And the link for -
>> <td>{{=A('Download w title', _href=URL('default', 'download', 
>> args=[download_path, 'new_title']))}}</td>   
>>
>> ..looks like:
>>
>> http://127.0.0.1:8000/test_app/default/download/main_db.file.b36e427143f2c727.64633532346236612d373033622d343235352d383330302d616362613637366136396262.txt/new_title
>>
>>
>> The latter generates the 404 error. As you can see, when I add the 
>> 'download_filename' arg, a new path is generated with the desired filename 
>> appended to the path, which doesn't seem to make sense.
>>
>> Thanks again for your help. Let me know if there is any more info I can 
>> provide.
>>
>> Cheers,
>> jl
>>  
>>
>>
>>
>>
>> On Tuesday, October 15, 2013 8:21:42 PM UTC-7, Anthony wrote:
>>>
>>> We need to see more code -- maybe your model and the code that generates 
>>> the value of download_path. response.download() will return a 404 if the 
>>> filename is not of the right format, it can't find the table/field, or it 
>>> can't retrieve the file.
>>>
>>> Anthony
>>>
>>> On Tuesday, October 15, 2013 10:06:45 PM UTC-4, Jordan Ladora wrote:
>>>>
>>>> Ha! Thanks for that.. I upgraded to 2.7.4. but get 404 not found when I 
>>>> use Anthony's code..
>>>>
>>>> in the view-
>>>>
>>>>     <td>{{=A('Download', _href=URL('default', 'download', 
>>>> args=download_path))}}</td>   
>>>>     <td>{{=A('Download w title', _href=URL('default', 'download', 
>>>> args=[download_path, 'new_title']))}}</td>   
>>>>
>>>>
>>>> in default.py-
>>>>
>>>> @auth.requires_login()
>>>> def download():
>>>>     """
>>>>     allows downloading of uploaded files
>>>>     http://..../[app]/default/download/[filename]
>>>>     """
>>>> ##    response.download(self, request, db, 
>>>> chunk_size=DEFAULT_CHUNK_SIZE, attachment=True, download_filename=None):
>>>>     return response.download(request, db, 
>>>> download_filename=request.args(1))
>>>>
>>>>
>>>> ...hopefully there is something else silly that i am doing wrong 
>>>> here...?
>>>>
>>>> Thanks,
>>>> jl
>>>>
>>>>
>>>> On Tuesday, October 15, 2013 3:01:49 PM UTC-7, Niphlod wrote:
>>>>>
>>>>> You're using an old version of web2py :D
>>>>>
>>>>> On Tuesday, October 15, 2013 11:40:55 PM UTC+2, Jordan Ladora wrote:
>>>>>>
>>>>>> Err.. I get an unknown parameter error for the 'download_filename' .. 
>>>>>> looking into globals.py I see 
>>>>>>
>>>>>>     def download(self, request, db, chunk_size=DEFAULT_CHUNK_SIZE, 
>>>>>> attachment=True):
>>>>>>
>>>>>> so I'm not sure about where this parameter goes(?)
>>>>>>
>>>>>> Thanks,
>>>>>> -j
>>>>>>
>>>>>>>
>>>>>>>

-- 
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