gpt4 book ai didi

python - 为人们提供一次性 url 以下载文件的 Django/Python 解决方案是什么?

转载 作者:太空狗 更新时间:2023-10-30 01:10:38 26 4
gpt4 key购买 nike

我正在寻找一种在事件中向某人出售卡片的方法,该卡片将具有唯一的代码,他们以后可以使用该代码来下载文件(mp3、pdf 等)一次掩盖真实的文件位置,这样精明的下载文件的人将无法多次下载文件。最好将文件托管在 Amazon S3 上以节省我们服务器位于同一位置的带宽。

我对代码的想法是预先生成将印在卡片上的唯一代码,并将这些代码存储在数据库中,该数据库还可以有一个字段来存储文件下载的次数。这样我们就可以设置允许用户下载文件的尝试次数。

我需要指导的部分是如何隐藏/屏蔽原始文件位置,以便人们无法窃取该 url,然后根据需要多次下载该文件。我已经进行了 Google 搜索,但我没有使用正确的关键字进行搜索,或者已经没有很多库或代码片段可用于此类内容。

我猜想我可以使用 django.views.static.serve 来组装一些东西,它充当实际文件和下载文件的用户之间的一种代理。我认为这种方法的唯一缺点是我需要使用实际的 Web 服务器并且无法将文件存储在 Amazon S3 上。

非常感谢任何建议或想法。

最佳答案

好主意。但是,我会警告不要使用单一下载方法,因为不能保证他们的第一次下载尝试会成功。也许改用时间过期方法?

但用 Django 肯定可以做到这一点。以下是基本方法的概述:

  • 为这些文件设置一个 django url
  • 使用作为唯一字符串的 GET 参数来标识要获取的文件。
  • 保留一个数据库表,其中有一个用于下载文件的 FileField。该表将唯一字符串映射到文件在文件系统上的位置。
  • 要将文件作为下载提供,请像这样在 View 中设置响应 header :

(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 - 为人们提供一次性 url 以下载文件的 Django/Python 解决方案是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1455109/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com