博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django二次开发对接FastDFS
阅读量:4505 次
发布时间:2019-06-08

本文共 2324 字,大约阅读时间需要 7 分钟。

项目上传和下载图片流程

django admin的ImageField默认会把文件存到settings.py配置的MEDIA_ROOT目录下,所以存储图片的数量受限于django服务器的硬盘大小。为了支持海量的图片存储,

更易于拓展存储空间,使用FastDFS分布式存储系统。如果用户上传的文件重复(文件指纹一样),那么系统只有存储一份数据。
1112571-20180910153634901-1277840267.png
1112571-20180910153709173-1419482703.png

在文件存储服务器使用nginx支持大量用户请求

1112571-20180910153808675-2009211580.png
nginx对接FastDFS的简要配置

server {            listen       8888;            server_name  localhost;            location ~/group[0-9]/ {                ngx_fastdfs_module;            }            error_page   500 502 503 504  /50x.html;            location = /50x.html {            root   html;            }        }

settings.py

# 设置Django的文件存储类DEFAULT_FILE_STORAGE='utils.fdfs.storage.FDFSStorage'# 设置fdfs使用的client.conf文件路径FDFS_CLIENT_CONF='./utils/fdfs/client.conf'# 设置fdfs存储服务器上nginx的IP和端口号FDFS_URL='http://127.0.0.1:8888/'

自定义文件存储类

from django.core.files.storage import Storagefrom django.conf import settingsfrom fdfs_client.client import Fdfs_clientclass FDFSStorage(Storage):    '''fast dfs文件存储类'''    def __init__(self, client_conf=None, base_url=None):        '''初始化'''        if client_conf is None:            client_conf = settings.FDFS_CLIENT_CONF        self.client_conf = client_conf        if base_url is None:            base_url = settings.FDFS_URL        self.base_url = base_url    def _open(self, name, mode='rb'):        '''打开文件时使用'''        pass    def _save(self, name, content):        '''保存文件时使用'''        # name:你选择上传文件的名字 test.jpg        # content:包含你上传文件内容的File对象        # 创建一个Fdfs_client对象        client = Fdfs_client(self.client_conf)        # 上传文件到fast dfs系统中        res = client.upload_by_buffer(content.read())        # dict        # {        #     'Group name': group_name,        #     'Remote file_id': remote_file_id,        #     'Status': 'Upload successed.',        #     'Local file name': '',        #     'Uploaded size': upload_size,        #     'Storage IP': storage_ip        # }        if res.get('Status') != 'Upload successed.':            # 上传失败            raise Exception('上传文件到fast dfs失败')        # 获取返回的文件ID        filename = res.get('Remote file_id')        return filename    def exists(self, name):        '''Django判断文件名是否可用,返回False表示一直可用'''        return False    def url(self, name):        '''返回访问文件的url路径,就是ImageField字段image的url属性的值,image.url,默认的image的url是这样的格式:'/media/001.jpg' '''        return self.base_url + name

转载于:https://www.cnblogs.com/longyunfeigu/p/9620143.html

你可能感兴趣的文章
2014,码农梦想,先从态度开始!
查看>>
常用板子
查看>>
linux中安装eclipse--CnetOS6.5
查看>>
应用层拒绝服务攻击
查看>>
JavaScript学习总结(五)——jQuery插件开发与发布
查看>>
广度优先(迷宫找人)
查看>>
word2vec 评测 window_different
查看>>
我觉得二专很OK-2
查看>>
poj 2777
查看>>
最新版本GIT安装
查看>>
Python微信
查看>>
Oracle 存储过程起步
查看>>
python变量和作用域
查看>>
将AJAX返回值纵向排序赋值给Table标签
查看>>
MacOS下brew的安装和使用 lua环境搭建 lua http请求
查看>>
Java自学成长路线(转载)
查看>>
UITableView的section header view悬停的方法
查看>>
Codeforces Round #568 (div. 2)
查看>>
asp.net(C#)链接Oracle连接字符串
查看>>
【深度学习笔记】Anaconda及开发环境搭建
查看>>