通过Heroku从Amazon S3提供静态文件

时间:2014-11-30 11:52:35

标签: heroku flask gunicorn

我有一个使用大量静态文件的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屏蔽的问题。

我的应用程序堆栈是:

  • Python Flask
  • Gunicorn
  • 的Heroku

1 个答案:

答案 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')