1.自定义文件存储器类
- 配置文件settings中加入如下配置
# 设置Django的文件存储类、(名字固定)
DEFAULT_FILE_STORAGE='utils.fdfs.storage.FDFSStorage'# 设置fdfs使用的client.conf文件路径(名字自己定义)
FDFS_CLIENT_CONF='./utils/fdfs/client.conf'# 设置fdfs存储服务器上nginx的IP和端口号(名字自己定义)
FDFS_URL='http://172.16.179.131:8888/'
- 创建utils/fdfs 目录
- storage.py文件中自定义文件存储类
FDFSStorage继承Storage,并重写_open、_save方法
from django.core.files.storage import Storage
from django.conf import settings
from 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_CONFself.client_conf = client_confif base_url is None:base_url = settings.FDFS_URLself.base_url = base_urldef _open(self, name, mode='rb'):'''打开文件时使用'''passdef _save(self, name, content):'''保存文件时使用'''# name:你选择上传文件的名字# 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失败')# 获取返回的文件IDfilename = res.get('Remote file_id')return filenamedef exists(self, name):'''Django判断文件名是否可用'''return Falsedef url(self, name):'''返回访问文件的url路径'''return self.base_url+name
2.项目上传图片和使用图片流程
3.FastDFS结合Nginx优点
1)海量存储,存储容量扩展方便
2)文件内容重复
3)结合Nginx提高网站提供图片的效率