我在我的 Web 服务中使用 Amazon S3。工作流程如下:
- 用户上传大量文件到 Web 服务器。Web 服务器首先将它们存储在本地,然后异步上传到 S3。
- 用户发送 HTTP 请求以启动作业(处理这些上传的文件)。
- Web 服务请求工作进程执行作业。
- 工作进程执行作业并将结果上传到 S3。
- 用户从 Web 服务器请求下载链接,返回
somedbrecord.result_file.url
。 - 用户使用此链接下载结果。
为了处理文件,我使用了 QueuedStorage
后端。我像这样初始化我的 FileFields
:
user_uploaded_file = models.FileField(..., storage=queued_s3storage, ...)
result_file = models.FileField(..., storage=queued_s3storage, ...)
其中queued_s3storage
是一个从...backends.QueuedStorage
派生的类的对象,而remote
字段设置为'...backends.s3boto.S3BotoStorage'
。
现在我计划在一台机器上部署整个系统并在本地运行所有东西,我想用基于我的本地文件系统的东西来替换这个'...backends.s3boto.S3BotoStorage'
。
第一个解决方法是使用FakeS3,它可以在本地“模拟”S3。虽然可行,但这不是理想的做法,只会增加不必要的额外开销。
我有一个正在运行的Nginx服务器,并从特定目录提供静态文件。如何创建我的“远程存储”类,实际上将文件存储在本地,但提供下载链接,指向由Nginx提供的文件?(例如http://myip:80/filedir/file1
)。在Django中是否有标准库类可以实现这个需求?