把项目的文件上传到 FastDFS 存储服务器中
在 utils
中新建 fdfs
python package
utils/fdfs/storage.py
from django.core.files.storage import Storage
from fdfs_client.client import Fdfs_client
class FDFSStorage(Storage):
'''fastDFS 文件存储类'''
def _open(self,name,mode='rb'):
'''打开文件时使用'''
pass
def _save(self,name,content):
'''保存文件时使用'''
# name 选择上传文件的名字
# content 包含上传文件内容的file对象
# 创建一个Fdfs_client 对象
client = Fdfs_client('./utils/fdfs/client.conf')
# 上传 文件到 fastDFS 服务器上
res = client.upload_by_buffer(content.read()) # 根据文件内容上传,返回一个字典
# 返回 字典格式如下
#@return 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 success else None
if res.get('Status') != 'Upload successed.':
# 上传失败
raise Exception('上传文件到FastDFS失败')
# 获取 上传返回的ID
filename = res.get('Remote file_id')
return filename
def exists(self, name):
'''Django判断文件名是否可用'''
# Django 默认文件可用
return False
def url(self, name):
'''返回访问文件url路径'''
# 返回的 name 指 group1/M00/00/00/wKgyW11bYgOADXYjAAAy1TlGVKQ7152051
return name
拷贝客户端配置文件
cp /etc/fdfs/client.conf /home/mikowoo/Documents/dailyfresh/utils/fdfs/
修改
# the base path to store log files
base_path=/home/mikowoo/Documents/log # 记录文件日志地址
tracker_server=192.168.50.91:22122 # fastDFS tracker_server IP
dailyfresh/settings.py
# 设置Django文件存储类
DEFAULT_FILE_STORAGE = 'utils.fdfs.storage.FDFSStorage'
创建后台超级管理员
python manage.py createsuperuser
# user: admin
# password : apple0451
127.0.0.1:8000/admin
添加一个 商品种类
访问测试
http://192.168.50.91:8888/group1/M00/00/00/wKgyW11bacuAHisLAAAqR3YTjIE3418324
static/test.html
<body>
<img src="http://192.168.50.91:8888/group1/M00/00/00/wKgyW11bacuAHisLAAAqR3YTjIE3418324">
body>
访问 127.0.0.1:8000/static/test.html
查看测试结果
utils/fdfs/storage.py
from django.core.files.storage import Storage
from fdfs_client.client import Fdfs_client
class FDFSStorage(Storage):
'''fastDFS 文件存储类'''
def __init__(self,client_config=None,base_url=None):
# 初始化
if client_config is None:
client_config = './utils/fdfs/client.conf'
self.client_conf = client_config
if base_url is None:
base_url = 'http://192.168.50.91:8888/'
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('./utils/fdfs/client.conf')
client = Fdfs_client(self.client_conf)
# 上传 文件到 fastDFS 服务器上
res = client.upload_by_buffer(content.read()) # 根据文件内容上传,返回一个字典
if res.get('Status') != 'Upload successed.':
# 上传失败
raise Exception('上传文件到FastDFS失败')
# 获取 上传返回的ID
filename = res.get('Remote file_id')
return filename
def exists(self, name):
'''Django判断文件名是否可用'''
# Django 默认文件可用
return False
def url(self, name):
'''返回访问文件url路径'''
# 返回的 name 指 group1/M00/00/00/wKgyW11bYgOADXYjAAAy1TlGVKQ7152051
#return 'http://192.168.50.91:8888/'+name
return self.base_url + name
在项目配置设置中指定 使用的客户端配置文件
dailyfresh/settings.py
# 设置FastDFS 客户端使用的配置文件
FDFS_CLIENT_CONF = './utils/fdfs/client.conf'
# 设置FastDFS 服务器存储上 Nginx 的IP 和 端口号
FDFS_URL = 'http://192.168.50.91:8888/'
utils/fdfs/storage.py
from django.conf import settings
class FDFSStorage(Storage):
'''fastDFS 文件存储类'''
def __init__(self,client_config=None,base_url=None):
# 初始化
if client_config is None:
#client_config = './utils/fdfs/client.conf'
client_config = settings.FDFS_CLIENT_CONF
self.client_conf = client_config
if base_url is None:
#base_url = 'http://192.168.50.91:8888/'
base_url = settings.FDFS_URL
self.base_url = base_url