使用python-bottle框架进行web开发,目前开发了一个在局域网内方便下载和上传文件的服务器DNUP。在下载时,就特定的文件夹刷新下载链接。此时,需要在后端python文件中使用os.listdir()遍历文件夹下的文件,然后将结果传递给前端html文件,并循环生成下载连接。
# 后端DNUP.py
@bottle.route('/download/<filename:path>')
def download(filename):
return bottle.static_file(filename, root='F:\\', download=filename)
@bottle.post('/filelist')
@bottle.view('filelist')
def get_download_info():
rev = bottle.request.forms.get('opts')
...判断语句...
pwd = u'F:\\file'
list = os.listdir(pwd)
info = {'tplrev':rev, 'tpllist':list}
return info
#前端页面
<div class="rht">
<ul>
%for name in tpllist:
<ol><a href="/download/{{tplrev}}/{{name}}">{{name}}</a></ol>
%end
</ul>
</div>
如果执行python DNUP.py然后再/download/filename下下载文件会发现,页面上中文文件显示正常,但是点击文件进行下载时发现页面404,无法查找到下载文件,并且显示的文件连接为unicode编码。而win下是ascii编码,导致使用unicode编码无法查找到需要下载的文件,解决方法是将生成的/download/连接进行解码:
@bottle.route('/download/<filename:path>')
def download(filename):
return bottle.static_file(filename.decode('utf-8'), root='F:\\', download=filename)
此时就可以进行正常下载了