用途:海量存储,存储容量扩展方便,文件内容重复。结合nginx提高网站提供图片的效率。
from django.core.files.storage import Storage
from django.conf import settings
from fdfs_client.client import Fdfs_client
class 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:你选择上传文件的名字
# 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判断文件名是否可用'''
return False
def url(self, name):
'''返回访问文件的url路径'''
return self.base_url+name
from django.conf import settings 中自定义:
设置fdfs使用的client.conf文件路径
FDFS_CLIENT_CONF=’./utils/fdfs/client.conf’
设置fdfs存储服务器上nginx的IP和端口号
FDFS_URL=‘http://172.6.1.1:8888/’