当前位置:  开发笔记 > 编程语言 > 正文

使用Django将异步文件上载到Amazon S3

如何解决《使用Django将异步文件上载到AmazonS3》经验,为你挑选了4个好方法。

我正在使用此文件存储引擎在上传文件时将文件存储到Amazon S3:

http://code.welldev.org/django-storages/wiki/Home

上传需要相当长的时间,因为在将响应返回给客户端之前,必须先将文件从客户端上载到Web服务器,然后再将Web服务器上载到Amazon S3.

我想将文件发送到S3异步的过程,因此响应可以更快地返回给用户.使用文件存储引擎执行此操作的最佳方法是什么?

谢谢你的建议!



1> Vasil..:

我采取了另一种解决这个问题的方法.

我的模型有2个文件字段,一个使用标准文件存储后端,另一个使用s3文件存储后端.当用户上传文件时,它会被存储在本地.

我的应用程序中有一个管理命令,它将所有localy存储的文件上传到s3并更新模型.

因此,当请求文件时,我检查模型对象是否使用s3存储字段,如果是,我将重定向发送到s3上的正确URL,如果不是,我发送重定向,以便nginx可以从磁盘提供文件.

这个管理命令可以由任何事件cronjob或其他事件触发.



2> Simon Willis..:

您可以让用户使用特殊表单(在隐藏字段中使用加密的策略文档)从浏览器直接将文件上载到S3.上传完成后,它们将重定向回您的应用程序.

更多信息:http://developer.amazonwebservices.com/connect/entry.jspa?externalID = 1434



3> thedk..:

有一个应用程序:-)

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)



4> Martin Thura..:

你可以解耦这个过程:

用户选择要上载的文件并将其发送到您的服务器.在此之后,他看到一个页面"感谢您上传foofile.txt,它现在存储在我们的存储后端"

当用户上传文件时,它将在您的服务器上存储临时目录,如果需要,一些元数据将存储在您的数据库中.

然后,服务器上的后台进程会将文件上载到S3.只有在您拥有对服务器的完全访问权限以便您可以为此创建某种"deamon"(或者只是使用cronjob)时,才可能这样做.*

显示的页面异步轮询并向用户显示某种进度条(或简单的"请等待"消息.仅当用户应该能够"使用"(将其放入消息中,或者这样的东西)它上传后直接.

[*:如果您只有一个共享主机,您可以构建一些解决方案,在用户浏览器中使用隐藏的Iframe来启动脚本,然后将文件上传到S3]

推荐阅读
mylvfamily
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有