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结果是什么呢? 我们可以打印查看:

>>>  Fdfs_client
>>> client = Fdfs_client()
>>> result = client.upload_by_filename()
getting connection
<fdfs_client.connection.Connection object at 0x1098d4cc0>
<fdfs_client.fdfs_protol.Tracker_header object at 0x1098d4908>
>>> result
{
Group name': group1,Remote file_idgroup1/M00/00/00/wKhnnlxw_gmAcoWmAAEXU5wmjPs35.jpegStatusUpload successed.Local file nameUploaded size69.00KBStorage IP172.16.238.128
 }
>>>

其中,上面各个数据的参数在下面有解释.

Remote file_id 对应的值,即为 FastDFS 保存文件的路径

ret = {
Storage中组名文件保存的位置文件上传结果(成功还是失败)上传文件的路径上传文件的大小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

 

相关文章

最近一直在开发Apworks框架的案例代码,同时也在一起修复Apw...
最近每天都在空闲时间努力编写Apworks框架的案例代码WeText。...
在《Kubernetes中分布式存储Rook-Ceph部署快速演练》文章中,...
最近在项目中有涉及到Kubernetes的分布式存储部分的内容,也...
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.ne...
CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.ne...