自定义文件存储系统, 前提是使用Docker安装和运行FastDFS.
1.⾃自定义⽂文件存储系统的类
from django.core.files.storage import Storage
class FastDFSStorage(Storage):
...
2. 内部实现
class FastDFSStorage(Storage):
"""⾃自定义Django⽂文件存储系统"""
def __init__(self, client_conf=None, base_url=None):
self.client_conf = client_conf or settings.FDFS_CLIENT_CONF
self.base_url = base_url or settings.FDFS_BASE_URL
def _open(self, name, mode='rb'):
"""打开⽂文件时调⽤用的,⽬目前⽤用不不到,但是必须实现,所以pass"""
pass
def _save(self, name, content):
"""
保存⽂文件时调⽤用的
:param name: 要保存的⽂文件名字
:param content: 要保存的⽂文件内容
:return: ⽂文件在fdfs唯⼀一标识(file_id)
"""
client = Fdfs_client(self.client_conf)
ret = client.upload_by_buffer(content.read())
# 判断上传是否成功
if ret.get('Status') != 'Upload successed.':
raise Exception('fastfds upload failed')
# 返回结果
file_id = ret.get('Remote file_id')
return file_id
def exists(self, name):
"""判断⽂文件是否存在时调⽤用的,返回Fasle告诉Django每次都是新的⽂文件"""
return False
def url(self, name):
"""返回⽂文件全路路径"""
return self.base_url + name
3.修改默认的存储后端, 修改配置文件
# django⽂文件存储
DEFAULT_FILE_STORAGE = 'meiduo_mall.utils.fastdfs.fdfs_storage.FastDFSStorage'
# FastDFS
FDFS_BASE_URL = 'http://----ip地址----:8888/'
FDFS_CLIENT_CONF = os.path.join(BASE_DIR, 'utils/fastdfs/client.conf')
版权声明:本文为xiangwenv587原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。