我有一个Flask应用程序,可让用户下载MP3文件。我怎样才能使下载的URL仅在特定时间段内有效?
例如,我不想让任何人只访问example.com/static/sound.mp3
并访问该文件,而是要验证每个请求以防止不必要的带宽量。
我正在使用Apache服务器,但如果更容易实现,我可能会考虑切换到另一台服务器。此外,我不想使用Flask来提供文件,因为这会通过强制Flask直接向用户提供文件来导致性能开销。相反,它应该使用Apache来提供文件。
答案 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服务器。