上传文件时,我使用此文件存储引擎将文件存储到亚马逊S3:
http://code.welldev.org/django-storages/wiki/Home
上传需要相当长的时间,因为必须首先将文件从客户端上传到web服务器,然后将web服务器上传到亚马逊S3,然后才能将响应返回给客户端。
我希望将文件发送到S3的过程是异步的,这样响应就可以更快地返回给用户。使用文件存储引擎执行此操作的最佳方式是什么?
谢谢你的建议!
发布于 2009-03-22 16:35:38
我采取了另一种方法来解决这个问题。
我的模型有2个文件字段,一个使用标准文件存储后端,另一个使用s3文件存储后端。当用户上传一个文件时,它被存储在本地。
我的应用程序中有一个管理命令,可以将所有本地存储的文件上传到s3并更新模型。
因此,当一个文件请求到来时,我会检查模型对象是否使用了s3存储字段,如果是,我会发送一个重定向到s3上正确的url,如果没有,我就发送一个重定向,这样nginx就可以从磁盘提供文件了。
当然,这个管理命令可以由任何事件、cronjob或其他任何事件触发。
发布于 2009-05-11 14:01:50
您的用户可以使用特殊的表单(隐藏字段中的加密策略文档)将文件直接从浏览器上传到S3。一旦上传完成,它们将被重定向回您的应用程序。
更多信息请点击此处:http://developer.amazonwebservices.com/connect/entry.jspa?externalID=1434
发布于 2012-03-21 14:18:09
有一个应用程序可以做到这一点:-)
https://github.com/jezdez/django-queued-storage
它做的正是您需要的--而且更多,因为您可以设置任何“本地”存储和任何“远程”存储。这个应用程序将你的文件存储在快速的“本地”存储(例如MogileFS存储),然后使用Celery (django-celery),将尝试异步上传到“远程”存储。
以下是几点意见:
安装和使用也非常简单和直接:
pip install django-queued-storage追加到INSTALLED_APPS
INSTALLED_APPS += ('queued_storage',)在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)https://stackoverflow.com/questions/670442
复制相似问题