django实现文件上传到服务器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django实现文件上传到服务器相关的知识,希望对你有一定的参考价值。

参考技术A response = requests.post(PATH, data='document_name': document_path, 'file': base64.b64encode(file.read())) 这个方法其实就是将文件信息和转成base64的文件发到服务器那边,那边就是以下的方法存入服务器

文件存入本地的方法

Django + Nginx将上传的文件保存到另一台服务器并反向文件

我有2台服务器:首先是Nginx和Django,第二台是存储服务器

Nginx and app server IP: 192.168.1.1

storage server IP: 192.168.1.2

Nginx安装在两台服务器上。

在Django配置媒体路径:

MEDIA_ROOT = os.path.join(BASE_DIR,'media')

MEDIA_URL = '/media/'

Nginx配置在第一台服务器中:

server {
    listen  80;
    server_name 192.168.1.1;
    access_log /var/log/nginx/access.log;

    error_log /var/log/nginx/error.log ;
    location = /favicon.ico { access_log off; log_not_found off; }

    location  /media/ {
        proxy_pass http://192.168.1.2/;
    }


    location / {
        uwsgi_pass  unix:/tmp/uwsgi/app.sock;
        include     uwsgi_params;
    }

    location /static/  {
        alias /home/ubuntu/app/static/;
    }

}

和存储服务器Nginx配置:

server {
    listen  80;
    server_name 192.168.1.2;
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log ;

    location /media/  {
      alias /home/ubuntu/app/media;
   }
}

问题:

Django如何保存(上传文件)到存储服务器(192.168.1.2)?

如果建议解决方案的代码变化最小,则更好。

Nginx如何从存储服务器转换文件?

最终用户只需键入192.168.1.1

答案

解决方案1:网络文件系统(NFS)

NFS的一个例子是GlusterFS

它的作用是,它使多个磁盘或服务器可用作单个目录。因此,您可以将其配置为将其他服务器显示为媒体目录以及放在其中的任何文件,它将自动存储在您的其他服务器中。您可以像访问媒体目录一样获取这些文件,即使它们位于另一台计算机上也是如此。您的django代码或nginx配置无需更改。

解决方案2:自定义文件存储后端

另一种解决方案是编写自己的File Storage backend并将图像从那里保存到第二台服务器。事实上,有一个名为django-storages的库,它支持使用FTP将文件上传到另一台服务器。见文档:http://django-storages.readthedocs.io/en/latest/backends/ftp.html


就个人而言,第二种解决方案对我来说似乎更好,因为你现在并不真正需要NFS。即使您以后再做,也可以在第二台服务器上安装Gluster并从那里扩展。

以上是关于django实现文件上传到服务器的主要内容,如果未能解决你的问题,请参考以下文章

Django Python将文件上传到特定文件夹

Django Form表单上传文件

如何使用django restfulframework 实现文件上传

将文件从iPhone上传到Django

从 django 静态文件提供服务并上传到 heroku 时无法找到反应静态文件

django实现文件上传删除下载