我正在使用此文件存储引擎在上传文件时将文件存储到Amazon S3:
http://code.welldev.org/django-storages/wiki/Home
上传需要相当长的时间,因为在将响应返回给客户端之前,必须先将文件从客户端上载到Web服务器,然后再将Web服务器上载到Amazon S3.
我想将文件发送到S3异步的过程,因此响应可以更快地返回给用户.使用文件存储引擎执行此操作的最佳方法是什么?
谢谢你的建议!
Vas*_*sil 24
我采取了另一种解决这个问题的方法.
我的模型有2个文件字段,一个使用标准文件存储后端,另一个使用s3文件存储后端.当用户上传文件时,它会被存储在本地.
我的应用程序中有一个管理命令,它将所有localy存储的文件上传到s3并更新模型.
因此,当请求文件时,我检查模型对象是否使用s3存储字段,如果是,我将重定向发送到s3上的正确URL,如果不是,我发送重定向,以便nginx可以从磁盘提供文件.
这个管理命令可以由任何事件cronjob或其他事件触发.
Sim*_*son 22
您可以让用户使用特殊表单(在隐藏字段中使用加密的策略文档)从浏览器直接将文件上载到S3.上传完成后,它们将重定向回您的应用程序.
更多信息:http://developer.amazonwebservices.com/connect/entry.jspa?externalID = 1434
the*_*edk 18
有一个应用程序:-)
https://github.com/jezdez/django-queued-storage
它完全符合您的需求 - 更重要的是,因为您可以设置任何"本地"存储和任何"远程"存储.此应用程序将您的文件存储在快速"本地"存储(例如MogileFS存储)中,然后使用Celery(django-celery),将尝试异步上载到"远程"存储.
几句话:
棘手的是 - 您可以将其设置为复制和上传,或上传和删除策略,一旦上传后将删除本地文件.
第二个棘手的事情 - 它将从"本地"存储服务文件,直到它没有上传.
它还可以配置为在上载失败时进行重试次数.
安装和使用也非常简单明了:
pip install django-queued-storage
Run Code Online (Sandbox Code Playgroud)
附加到INSTALLED_APPS
:
INSTALLED_APPS += ('queued_storage',)
Run Code Online (Sandbox Code Playgroud)
在models.py
:
from queued_storage.backends import QueuedStorage
queued_s3storage = QueuedStorage(
'django.core.files.storage.FileSystemStorage',
'storages.backends.s3boto.S3BotoStorage', task='queued_storage.tasks.TransferAndDelete')
class MyModel(models.Model):
my_file = models.FileField(upload_to='files', storage=queued_s3storage)
Run Code Online (Sandbox Code Playgroud)
你可以解耦这个过程:
[*:如果您只有一个共享主机,您可以构建一些解决方案,在用户浏览器中使用隐藏的Iframe来启动脚本,然后将文件上传到S3]
归档时间: |
|
查看次数: |
16202 次 |
最近记录: |