Docker 和 FastDFS 上传和下载文件
Posted tracydzf
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker 和 FastDFS 上传和下载文件相关的知识,希望对你有一定的参考价值。
Docker 安装运行 FastDFS
获取 FastDFS 镜像
# 从远端仓库拉取镜像 # 其中 delron 是仓库名. # fastdfs 是镜像名 sudo docker image pull delron/fastdfs # 或者: # 解压教学资料中本地镜像 # 1. 从发的资料中获取 fastdfs_docker.tar 文件 # 2. 把该文件放到桌面的 haha 文件夹中 # 3. cd haha # 4. 运行以下的命令: sudo docker load -i fastdfs_docker.tar
开启 tracker 容器
- 我们将 tracker 运行目录映射到宿主机的
/var/fdfs/tracker
目录中。
在命令行运行这句话, 开启 tracker 容器.
udo 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
目录中。
- 在命令行运行这句话, 开启 storage 容器.
sudo docker run -dti --name=storage --network=host -e TRACKER_SERVER=tracker所在ip:22122 -v /var/fdfs/storage:/var/fdfs delron/fastdfs storage
查看宿主机映射路径
注意:如果无法重启 storage 容器,可以删除/var/fdfs/storage/data
目录下的fdfs_storaged.pid
文件,然后重新运行 storage。
FastDFS 的 Python客户端
# 进入scripts目录: cd scripts # 运行安装: pip install fdfs_client-py-master.zip # 安装本地文件 pip install mutagen # 联网下载安装 pip install requests # 联网下载安装
使用
使用 FastDFS 客户端,需要有配置文件
我们在 meiduo_mall / utils 目录下新建 fastdfs 目录
将提供给大家资料中的 client.conf 配置文件复制到这个目录中:
-
在 meiduo_mall / utils / fastdfs / 移入 client.conf
-
修改 client.conf 配置文件
我们需要根据个人的电脑, 更改如下的两项:
模板: # base_path = FastDFS客户端存放日志文件的目录: base_path=/Users/meihao/Desktop # tracker_server = 运行tracker服务的机器ip:22122 tracker_server=172.16.238.128:22122
效果如图所示:
上传文件需要先创建 fdfs_client.client.Fdfs_client 的对象,并指明配置文件
例如:
我们进入项目的 shell 环境中:
python manage.py shell
进入之后,添加如下代码:
# 先导入我们安装的 fdfs_client.client 客户端 from fdfs_client.client import Fdfs_client # 使用添加的客户端创建一个对象 # 这里需要注意: 添加的路径应该为配置文件的绝对路径: client = Fdfs_client(‘meiduo_mall/utils/fastdfs/client.conf‘) # 使用刚刚创建的client调用方法, 上传图片(需要图片的绝对路径) # 这里/Users/meihao/Desktop为老师电脑的路径,需要换成自己的. ret = client.upload_by_filename(‘/Users/meihao/Desktop/demo.jpeg‘)
上传文件的方法有两种, 分别为:
# 这个是通过文件名上传文件 client.upload_by_filename(上传文件的绝对路径) # 或是通过这个方法: # 这个是通过文件内容上传文件: client.upload_by_buffer(上传文件的bytes数据)
效果:
在 shell 环境中调用刚刚的代码, 然后得到result结果,
这个result结果是什么呢? 我们可以打印查看:
>>> from fdfs_client.client import Fdfs_client >>> client = Fdfs_client(‘meiduo_mall/utils/fastdfs/client.conf‘) >>> result = client.upload_by_filename(‘/Users/meihao/Desktop/demo.jpeg‘) getting connection <fdfs_client.connection.Connection object at 0x1098d4cc0> <fdfs_client.fdfs_protol.Tracker_header object at 0x1098d4908> >>> result { ‘Group name‘: ‘group1‘, ‘Remote file_id‘: ‘group1/M00/00/00/wKhnnlxw_gmAcoWmAAEXU5wmjPs35.jpeg‘, ‘Status‘: ‘Upload successed.‘, ‘Local file name‘: ‘/Users/meihao/Desktop/demo.jpeg‘, ‘Uploaded size‘: ‘69.00KB‘, ‘Storage IP‘: ‘172.16.238.128‘ } >>>
其中, 上面各个数据的参数在下面有解释.
Remote file_id 对应的值, 即为 FastDFS 保存文件的路径
ret = { ‘Group name‘: ‘Storage中组名‘, ‘Remote file_id‘: ‘文件保存的位置‘, ‘Status‘: ‘文件上传结果(成功还是失败)‘, ‘Local file name‘: ‘上传文件的路径‘, ‘Uploaded size‘: ‘上传文件的大小‘, ‘Storage IP‘: ‘Storage服务器的ip地址‘ }
查看上传结果
所以, 我们打开浏览器, 访问地址:
- 协议:
http
- IP地址:
172.16.238.128
nginx
服务器的 IP 地址。- 因为 FastDFS 擅长存储静态文件,但是不擅长提供静态文件的下载服务,所以我们一般会将 Nginx 服务器绑定到 Storage ,提升下载性能。
- 端口:
8888
Nginx
服务器的端口。
- 路径:
group1/M00/00/00/wKhnnlxw_gmAcoWmAAEXU5wmjPs35.jpeg
- 文件在 Storage 上的文件索引。
- 完整图片下载地址
http://172.16.238.128:8888/group1/M00/00/00/wKhnnlxw_gmAcoWmAAEXU5wmjPs35.jpeg
以上是关于Docker 和 FastDFS 上传和下载文件的主要内容,如果未能解决你的问题,请参考以下文章
Java网络商城项目 SpringBoot+SpringCloud+Vue 网络商城(SSM前后端分离项目)八(文件的上传FastDFS和校验)(Nginx的请求前缀配置,在发布项目的时候要注意)(代