最近做的Django项目中需要存储图片文件,为了解决图片存储的问题,所以引入了FastDFS,主要是以下两个问题
- 存储相同名称的不同文件
- 存储不同名称的相同文件
简单说一下FastDFS
FastDFS 是用 c 语言编写的一款开源的分布式文件系统。
FastDFS 为互联网量身定制, 充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用 FastDFS 很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务。
FastDFS 架构包括 Tracker server 和 Storage server。客户端(client)请求 Tracker server 进行文 件上传、下载,通过 Tracker server 调度最终由 Storage server 完成文件上传和下载。
开发环境
1.docker容器中运行单节点的跟踪器(tracker)和存储节点(storage)
2.在windows10系统,python虚拟环境下安装 fastdfs_client 进行开发调试(python解释器版本:3.6.5)
3.使用的IDE:pycharm
安装fastdfs_client报错
pip install fdfs_client
解决办法
1.下载fdfs_client包
(下载地址:http://down.51cto.com/data/2448725)
解压之后直接将fdfs_client文件夹copy到python解释器的 /lib 目录下
解压得到的文件夹:
copy到python解释器的 /lib 目录下
2. 修改fdfs_client/storage_client.py文件,将第12行删除或注释(否则,使用时会报错ImportError: No module named sendfile)
# from fdfs_client.sendfile import *
3.安装 mutagen 和 requests
pip install mutagen
pip isntall requests
4.修改fastdfs配置文件:client_config
# connect timeout in seconds
# default value is 30s
connect_timeout=30
# network timeout in seconds
# default value is 30s
network_timeout=60
# the base path to store log files
# 日志存放路径
base_path=../../logs
# tracker_server can ocur more than once, and tracker_server format is
# "host:port", host can be hostname or ip address
# tracker服务器
tracker_server=192.168.11.200:22122
#standard log level as syslog, case insensitive, value list:
### emerg for emergency
### alert
### crit for critical
### error
### warn for warning
### notice
### info
### debug
log_level=info
# if use connection pool
# default value is false
# since V4.05
use_connection_pool = false
# connections whose the idle time exceeds this time will be closed
# unit: second
# default value is 3600
# since V4.05
connection_pool_max_idle_time = 3600
# if load FastDFS parameters from tracker server
# since V4.05
# default value is false
load_fdfs_parameters_from_tracker=false
# if use storage ID instead of IP address
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# default value is false
# since V4.05
use_storage_id = false
# specify storage ids filename, can use relative or absolute path
# same as tracker.conf
# valid only when load_fdfs_parameters_from_tracker is false
# since V4.05
storage_ids_filename = storage_ids.conf
#HTTP settings
http.tracker_server_port=80
#use "#include" directive to include HTTP other settiongs
##include http.conf
5.在 python 虚拟环境下进入 shell 终端进行上传测试
导入模块:
from fdfs_client.client import Fdfs_client
导入配置文件
注意:windows环境下绝对路径会发生转义,需要加上 "r" 说明是原生字符串
client = Fdfs_client(r'配置文件绝对路径')
上传图片
注意:windows环境下绝对路径会发生转义,需要加上 "r" 说明是原生字符串
client.upload_by_filename(r'图片文件绝对路径')
上传测试成功!
总结
1.修改lib/fdfs_client/storage_client.py文件,注释第12行;
2.windows环境下路径分隔符是 ‘\’ ,而linux使用 ‘/’,所以需要使用 ‘r’ 来声明是原生字符串;
3.如果上传文件提示连接tracker失败,请仔细检查client_config配置文件,配置文件中一定不要出现中文;
4.如果刚开始使用 pip install fdfs_client,报错,不要盲目安装VC++ 14.0,可以先去 控制面板==>>程序==>>程序和功能 查看是否已经安装过。