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()
作用