如何在Flask中生成临时下载?

时间:2015-09-24 23:06:09

标签: python apache flask

我有一个Flask应用程序,可让用户下载MP3文件。我怎样才能使下载的URL仅在特定时间段内有效?

例如,我不想让任何人只访问example.com/static/sound.mp3并访问该文件,而是要验证每个请求以防止不必要的带宽量。

我正在使用Apache服务器,但如果更容易实现,我可能会考虑切换到另一台服务器。此外,我不想使用Flask来提供文件,因为这会通过强制Flask直接向用户提供文件来导致性能开销。相反,它应该使用Apache来提供文件。

1 个答案:

答案 0 :(得分:0)

您可以使用S3来托管具有临时URL的文件。使用Flask将文件上传到S3(使用boto3),但使用动态生成的临时密钥。

示例网址:http://yourbucket.s3.amazon.com/static/c258d53d-bfa4-453a-8af1-f069d278732c/sound.mp3

然后,当您告诉用户下载文件的位置时,请为其提供该URL。然后,您可以使用cron作业在该时间段结束时删除S3文件。

这样,Amazon S3就直接提供文件,从而完全绕过Flask服务器。