我正在寻找一种在事件中向某人出售卡的方法,该卡具有唯一的代码,他们以后可以使用该代码以便一次下载文件(mp3,pdf等)并掩盖真实情况。文件位置,因此精明的人下载文件将不能多次下载文件。最好将文件托管在Amazon S3上,以节省服务器共处一地的带宽。
我对代码的想法是预生成将在卡上打印的唯一代码,并将这些代码存储在数据库中,该数据库也可以具有一个字段,该字段存储文件的下载次数。这样,我们可以设置允许用户下载文件的尝试次数。
我需要指导的部分是如何隐藏/掩盖原始文件的位置,以使人们无法窃取该URL,然后根据需要多次下载文件。我已经完成了Google搜索,或者不是在使用正确的关键字进行搜索,或者已经没有太多此类的库或摘要了。
我猜想我可以使用django.views.static.serve
组装一些东西,它充当实际文件和下载文件的用户之间的一种代理。我认为这种方法的唯一缺点是,我将需要使用实际的Web服务器,并且无法将文件存储在Amazon S3上。
任何建议或想法,我们将不胜感激。
最佳答案
整洁的主意。但是,我会警告不要使用单一下载方法,因为不能保证他们的首次下载尝试将成功。也许可以使用时间到期方法来代替?
但是使用Django肯定可以做到这一点。以下是基本方法的概述:
FileField
供下载文件。该表将唯一字符串映射到文件在文件系统上的位置。 (
path
是要转换的文件的位置)with open(path, 'rb') as f:
response = HttpResponse(f.read())
response['Content-Type'] = 'application/octet-stream';
response['Content-Disposition'] = 'attachment; filename="%s"' % 'insert_filename_here'
return response
由于我们使用此Django页面来提供文件,因此用户无法找到原始文件位置。
关于python - 什么是Django/Python解决方案,用于提供供人们下载文件的一次性URL?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1455109/