将Django FileField的内容上传到远程服务器

时间:2016-08-27 02:27:07

标签: python django file-upload django-models

在我的Django项目中,用户上传视频文件。最初,我将它们直接上传到Azure Blob Storage(相当于将其存储在Amazon S3上)。即在models.py我有:

class Video(models.Model):
   video_file = models.FileField(upload_to=upload_path, storage=OverwriteStorage())

OverwriteStorage覆盖Storage中的django.core.files.storage,并基本上将文件上传到Azure。

现在我需要将此文件上传到单独的Linux服务器(与我的Django Web应用程序不同的服务器)。在这个单独的服务器中,我将对视频文件执行一些操作(压缩,格式更改),然后像以前一样将其上传到Azure存储。

我的问题是:根据我的目标,如何更改我在models.py中上传文件的方式?一个说明性的例子会很好。我认为我需要更改FileField.upload_to,但我所看到的所有示例都表明它只是定义了本地文件系统路径。此外,我不想让用户正常上传内容,然后运行一个过程将文件上传到另一台服务器。直接这样做是我的偏好。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

我已经解决了亚马逊S3的类似问题,但概念应该是相同的。

首先,我使用django-storages,默认情况下,将我的媒体文件上传到S3(django-storages也支持Azure)。然后,我的团队从我们偶尔需要编写用户上传的目标服务器在我们的Django Web服务器上设置NFS共享安装。然后,我们只需使用" upload_to"覆盖django-storages。从本地路径到另一台服务器的挂载。

这个答案有一个快速示例,说明如何从一个服务器在另一个服务器上设置NFS共享:https://superuser.com/questions/300662/how-to-mount-a-folder-from-a-linux-machine-on-another-linux-machine

有几种方法可以给猫皮肤,但这对我们的团队来说似乎最简单。祝你好运!