Django框架文件保存的流程(以及自定义FDFS)
Django框架文件保存的流程
自定义文件存储类过程说明
自定义FDFS文件存储类
from django.core.files.storage import Storage
from django.conf import settings
from fdfs_client.client import Fdfs_client
from rest_framework.exceptions import APIException
class FDFSStorage(Storage):
"""FDFS自定义文件存储类"""
def __init__(self, client_conf=None, base_url=None):
if client_conf is None:
client_conf = settings.FDFS_CLIENT_CONF
# 保存fdfs客户端配置文件路径
self.client_conf = client_conf
if base_url is None:
base_url = settings.FDFS_URL
# 保存storage中nginx的地址
self.base_url = base_url
def _save(self, name, content):
"""
name: 上传文件的名称
content: 包含上传文件内容的File对象,content.read()获取上传文件内容
"""
# 将文件上传FDFS文件系统
client = Fdfs_client(self.client_conf)
# 上传文件
res = client.upload_by_buffer(content.read())
# 判断上传是否成功
if res.get('Status') != 'Upload successed.':
raise APIException('上传文件到FDFS失败')
# 获取file_id
file_id = res.get('Remote file_id')
return file_id
def exists(self, name):
"""
判断上传文件的名称和文件系统中原有的文件名是否冲突
name: 上传文件的名称
"""
return False
def url(self, name):
"""
返回可访问到文件系统文件的完整url地址:
name:表中文件字段存储内容
"""
return self.base_url + name
- 修改Django框架的默认文件存储类
DEFAULT_FILE_STORAGE='meiduo_mall.utils.fdfs.storage.FDFSStorage'
def url()
作用