Docker和FastDFS上传和下载文件-实操

Docker和FastDFS上传和下载文件

Docker安装运行FastDFS
获取FastDFS镜像
# 从仓库拉取镜像
$ sudo docker image pull delron/fastdfs
# 解压资料中本地镜像
$ sudo docker load -i 文件路径/fastdfs_docker.tar
开启tracker容器
• 我们将 tracker 运行目录映射到宿主机的 /var/fdfs/tracker目录中。
sudo docker run -dit --name tracker --network=host -v /var/fdfs/tracker:/var/fdfs delron/fastdfs tracker
开启storage容器
• TRACKER_SERVER=Tracker的ip地址:22122(Tracker的ip地址不要使用127.0.0.1)
• 我们将 storage 运行目录映射到宿主机的 /var/fdfs/storage目录中。
sudo docker run -dti --name storage --network=host -e TRACKER_SERVER=192.168.102.168:22122 -v /var/fdfs/storage:/var/fdfs delron/fastdfs storage
查看宿主机映射路径
注意:如果无法重启storage容器,可以删除/var/fdfs/storage/data目录下的fdfs_storaged.pid 文件,然后重新运行storage。

FastDFS客户端上传文件
• Python版本的FastDFS客户端使用参考文档
1.安装FastDFS客户端扩展
• 安装准备好的fdfs_client-py-master.zip到虚拟环境中
pip install fdfs_client-py-master.zip
pip install mutagen
pip install requests
2.准备FastDFS客户端扩展的配置文件
• lgshop.utils.fastdfs.client.conf
base_path=FastDFS客户端存放日志文件的目录
tracker_server=运行Tracker服务的机器ip:22122
3.FastDFS客户端实现文件存储
# 使用 shell 进入 Python交互环境
python manage.py shell
# 1. 导入FastDFS客户端扩展
from fdfs_client.client import Fdfs_client
# 2. 创建FastDFS客户端实例
相对路径'lgshop/utils/fastdfs/client.conf'如报错 改为绝对路径
client = Fdfs_client('lgshop/utils/fastdfs/client.conf')
# 3. 调用FastDFS客户端上传文件方法
ret = client.upload_by_filename('/kk.jpeg')
ret = {
    
    
  'Group name': 'group1',
  'Remote file_id': 'group1/M00/00/00/wKhnnlxw_gmAcoWmAAEXU5wmjPs35.jpeg',
  'Status': 'Upload successed.',
  'Local file name': '/kk.jpeg',
  'Uploaded size': '69.00KB',
  'Storage IP': '192.168.103.158'
 }
ret = {
    
    
  'Group name': 'Storage组名',
  'Remote file_id': '文件索引,可用于下载',
  'Status': '文件上传结果反馈',
  'Local file name': '上传文件全路径',
  'Uploaded size': '文件大小',
  'Storage IP': 'Storage地址'
 }
浏览器下载并渲染图片
思考:如何才能找到在Storage中存储的图片?
• 协议:
• http
• IP地址:192.168.10.252
• Nginx服务器的IP地址。
• 因为 FastDFS 擅长存储静态文件,但是不擅长提供静态文件的下载服务,所以我们一般会将 Nginx 服务器绑定到 Storage ,提升下载性能。
• 端口:8888
• Nginx服务器的端口。
• 路径:group1/M00/00/00/CtM3BVnqsV2ACAvPAAPWWMjR7sE760.jpg
• 文件在Storage上的文件索引。
• 完整图片下载地址
• http://192.168.10.252:8888/group1/M00/00/01/CtM3BVnqsV2ACAvPAAPWWMjR7sE760.jpg
• Nginx安装
sudo apt install nginx
编写测试代码:lgshop.utils.fdfs_t.html
<img src="http://192.168.10.252:8888/group1/M00/00/00/wKhnnlxw_gmAcoWmAAEXU5wmjPs35.jpeg" width="320" height="480">

filezilla.exe上传fastdfs_docker.tar
在这里插入图片描述
解压镜像 fastdfs_docker.tar
在这里插入图片描述
查看镜像
在这里插入图片描述
tracker 运行目录映射到宿主机 可查看到fdfs目录 此时的tracker已开启
sudo docker run -dit --name tracker --network=host -v /var/fdfs/tracker:/var/fdfs delron/fastdfs tracker

sudo docker run -dti --name storage --network=host -e TRACKER_SERVER=192.168.xxx.xxx:22122 -v /var/fdfs/storage:/var/fdfs delron/fastdfs storage
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
安装FastDFS客户端扩展 (已下载到桌面)
在这里插入图片描述
上传client.conf配置文件到项目的utils中:

在这里插入图片描述
clienf.conf

只修改以下两处 改成自己的图片路径和IP
base_path=D:\Envs\django_shop2\django_shop_two\lgshop\static\images
tracker_server=192.168.xx.xxx:22122


# 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=D:\Envs\django_shop2\django_shop_two\lgshop\static\images

# tracker_server can ocur more than once, and tracker_server format is
#  "host:port", host can be hostname or ip address
tracker_server=192.168.xx.xxx: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

进入交互环境安装报错:
在这里插入图片描述
重新打开一个cmder进入项目的虚拟环境
在这里插入图片描述
再次执行安装还报错,或参看:
https://blog.csdn.net/weixin_45905671/article/details/108060305
在这里插入图片描述
在这里插入图片描述
找到项目虚拟环境文件名字 -->进入项目扩展安装目录Lib --> site-packages --> fdfs_client -->utils.py
在这里插入图片描述
修改导包路径:(添加了 ._senf)
在这里插入图片描述
在这里插入图片描述
再次执行 成功!
在这里插入图片描述
创建FastDFS客户端实例
(相对路径如报错 可改为绝对路径 此处路径为项目中存放client.conf的路径)
client = Fdfs_client(r’D:\Envs\django_shop2\django_shop_two\lgshop\utils\fastdfs\client.conf’)
lgshop\utils\fastdfs\client.conf
调用FastDFS客户端上传文件方法
ret = client.upload_by_filename(‘cat.jpg’)
filenname ->项目中图片的路径
在这里插入图片描述
执行后报这个错,原因是我之前安装的storage/tracker服务没有打开
在这里插入图片描述
删除了原来的storage/tracker重新安装:
在这里插入图片描述

再次执行 成功!!
ret = client.upload_by_filename(‘D:\Envs\django_shop2\django_shop_two\lgshop\static\images\cat.jpg’)
在这里插入图片描述
保存的图片可以在浏览器上打开:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_45905671/article/details/115027756