就我而言,我有一个数据库,其中包含显示在概览页面上的文档缩略图。每次浏览器访问该站点时,都会再次下载所有缩略图,因此下载功能会再次加载数据库中的所有图像。因为我在 GAE 上运行,所以我的数据库读取量很大。
我尝试通过设置启用客户端站点缓存:
@auth.requires_login()
def download():
response.headers['Cache-Control'] = None
response.headers['Pragma'] = None
response.headers['Expires'] = None
return response.download(request, db)
我还读到 response.stream 可能会有所帮助,但 web2py 书说:
如上所述,response.download 应该用于检索通过上传字段存储的文件。response.stream 可用于其他情况,例如返回一个临时文件或控制器创建的 StringIO 对象。
- 编辑 -
我启用了客户端缓存:
session.forget() #important
expire_time = datetime.timedelta(days=2)
response.headers['Cache-Control'] = 'private, max-age%d'%(60*60*24*2)
response.headers['Pragma'] = None
response.headers['Expires'] = (request.utcnow + expire_time).strftime("%a, %d %b %Y %H:%M:%S GMT")
response.headers['Content-Disposition'] = \
'attachment;filename=' + filename + ';'
return response.stream(stream, filename=filename)