我有一个使用大量静态文件的Python应用程序。我想将这些静态文件存储在Amazon S3上。当用户请求文件(例如pdf)时,它将从S3提供。但是,出于美观的目的,我不想在地址栏中显示S3 URL,因为我觉得它只会混淆用户。如果用户要下载文件我不介意下载URL是否显示为S3,但是对于将在浏览器中查看的文件,我相信隐藏真正的URL是有道理的。
示例:用户在http://www.example.com/view/myfile.pdf查看pdf文件,其中服务器实际上来自外部网址,例如http://www.amazons3.com/user/file/file2.pdf
请注意,出于安全原因,我不这样做。经过一番研究后,我发现运行Nginx的服务器可以通过“X-Accel-Redirect”来掩盖URL。但是,由于Heroku,这不是一个真正的选择。
当Heroku处理路由时,我是否可以使用Herokus平台实现这种“屏蔽”?
我见过很多关于提供静态文件的问题,但没有关于URL屏蔽的问题。
我的应用程序堆栈是:
答案 0 :(得分:1)
在Flask应用程序中创建一条路径,该路径采用路径并重定向到相应的S3文件。
@app.route('/s3/<path:path>')
def s3_file(path):
return redirect('https://www.amazons3.com/user/file/{}'.format(path), code=301)
您可以使用url_for
构建合适的网址:
url_for('s3_file', path='file2.pdf')