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