前言

这几年一直在it行业里摸爬滚打,一路走来,不少总结了一些python行业里的高频面试,看到大部分初入行的新鲜血液,还在为各样的面试题答案或收录有各种困难问题

于是乎,我自己开发了一款面试宝典,希望能帮到大家,也希望有更多的Python新人真正加入从事到这个行业里,让python火不只是停留在广告上。

微信小程序搜索:Python面试宝典

或可关注原创个人博客:https://lienze.tech

也可关注微信公众号,不定时发送各类有趣猎奇的技术文章:Python编程学习

FDFS

什么是Fastdfs

FastDFS是一个开源的轻量级分布式文件系统,它对文件进行管理,功能包括:文件存储文件同步文件访问(文件上传、文件下载)等,解决了大容量存储和负载均衡的问题。特别适合以文件为载体的在线服务,如相册网站、视频网站等等

FastDFS 是用 c 语言编写的一款开源的分布式文件系统。FastDFS 为互联网量身定制, 充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用 FastDFS 很容易搭建一套高性能的文件服务器集群提供文件上传、下载等服务


FastDFS架构包括 Tracker serverStorage server

客户端请求Trackerserver进行过文件上传、下载

通过Tracker server调度最终由Storage server完成文件上传、下载


Tracker server

  • 作用是负载均衡和调度,通过Tracker server在文件上传时可以根据一些策略找到Storage server提供文件上传服务。可以将tracker称为追踪服务器调度服务器

Storage server

  • 作用是文件存储,客户端上传的文件最终存储在Storage存储器上,Storageserver没有实现自己的文件系统而是利用操作系统的文件系统来管理文件。可以将storage称为存储服务器

安装FDFS

  • 采用docker的方式进行安装,便捷简单
sudo docker image pull delron/fastdfs

启动Tracker&Storage

  • 开启fastdfstracker服务
docker run -dti --network=host --name tracker -v /var/fdfs/tracker:/var/fdfs delron/fastdfs tracker
  • 开启fastdfsstorage服务
docker run -dti --network=host --name storage -e TRACKER_SERVER=123.57.61.168:22122 -v /var/fdfs/storage:/var/fdfs delron/fastdfs storage

配置FDFS

  • 下载安装fastdfs的python客户端:https://github.com/JaceHo/fdfs_client-py>

Windows兼容问题

解压下载好的压缩包,提取fdfs_client文件夹

将该文件夹放入python的三方包目录下

C:\Python37\Lib\site-packages

  • 安装所需的两个额外模块
pip install mutagen
pip install requests
  • 注释fdfs_client/storage_client.py文件中的第十二行
#from fdfs_client.sendfile import *
  • 创建client.conf文件到django下
# project/client.conf
# 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=\static #FastDFS客户端存放日志文件的目录# tracker_server can ocur more than once, and tracker_server format is
#  "host:port", host can be hostname or ip address
tracker_server=123.57.61.168:22122 #运行tracker服务的机器IP地址#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
  • 上传测试代码
#client.upload_by_filename(文件名)
#client.upload_by_buffer(文件bytes数据)
from fdfs_client.client import Fdfs_client
client = Fdfs_client("client.conf")ret = client.upload_by_filename('1.jpg')
print(ret)

其中返回结果中的Remote file_id就是上传成功的保存文件名

{'Group name': 'group1', 'Remote file_id': 'group1\\M00/00/00/rBEUWlz_HzSAPPzBAAQ2UAPajsU035.jpg', 'Status': 'Upload successed.', 'Local file name': '1.jpg', 'Uploaded size': '269.00KB', 'Storage IP': '123.57.61.168\x008'
}

集成文件引擎

  • 重构django文件上传引擎

存储类中必须实现_open()和_save()方法,以及任何后续使用中可能用到的其他方法。

  • _open(name, mode = ‘rb’):被Storage.open()调用,在打开文件时被调用
  • save(name, content):被Storage.save()调用,name是传入的文件名,content是Django接收到的文件内容,该方法需要将content文件内容保存。Django会将该方法的返回值保存到数据库中对应的文件字段,也就是说该方法应该返回要保存在数据库中的文件名信息。
  • exists(name):如果名为name的文件在文件系统中存在,按返回True,否则返回Flase
  • url(name):返回文件的完整访问URL
  • delete(name):删除name文件
  • listdir(path):列出指定路径的文件
  • size(name):返回name文件的总大小
from django.conf import settings
from django.core.files.storage import Storage
from fdfs_client.client import Fdfs_client
class FastDFSStroage(Storage):"""定义FastDFS客户端类"""def __init__(self, base_url = None, client_conf = None):"""初始化对象:param base_url::param client_conf:"""if base_url is None:base_url = settings.FDAS_URL# 'http://123.57.61.168:8888' self.base_url = base_urlif client_conf is None:client_conf = settings.FDFS_CLIENT_CONF# FDFS_CLIENT_CONF = os.path.join(BASE_DIR, 'client.conf')self.client_conf = client_confdef _open(self, name, mode = 'rb'):"""打开文件:param name::param mode::return:"""passdef _save(self, name, content):"""保存文件:param name: 传入文件名:param content: 文件内容:return:保存到数据库中的FastDFSDE文件名"""client = Fdfs_client(self.client_conf)ret = client.upload_by_buffer(content.read())if ret.get("Status") != "Upload successed.":raise Exception("upload file failed")file_name = ret.get("Remote file_id")return file_namedef exists(self, name):"""检查文件是否重复, FastDFS自动区分重复文件:param name::return:"""return Falsedef url(self, name):"""获取name文件的完整url:param name::return:"""return self.base_url + name
  • 将文件引擎设置到settings中
#settings.py
DEFAULT_FILE_STORAGE = 'goods.views.FastDFSStorage'
  • 上传成功后的访问地址

在服务器IP地址的8888端口,记得打开对应阿里云的端口规则

  • 注意:在新版本的Remote file_id,由\\斜杠变为了/
['Remote file_id'].replace('\\','/')

Django集成古老的分布式文件存储系统fastdfs,解决文件存储难问题相关推荐

  1. 解除文件占用,解决文件被占用不能删除

    相信每一个娃子都有这么个苦逼的时候-- "操作无法完成,因为文件已在***中打开,请关闭该文件并重试."(***可以是系统组件.服务.程序等.) 这个时候娃子们一般会打开任务管理器 ...

  2. java电商项目搭建-------分布式文件存储系统(fastDFS)

    人之所以痛苦,那是因为你在成长.--------magic_guo 微服务项目,由于访问量和系统的高可用性能,会将上传的文件图片等存放在搭建的分布式文件存储系统:现在比较流行的文件存储系统有fastD ...

  3. fastdfs 吗 支持windows_主流开源文件存储系统-fastdfs是否支持windows?你可以选择minio...

    首先答案是肯定的,fastdfs不支持windows. 其次建议你使用Minio 一.引言 一般来说文件存储花钱就选择阿里云oss.七牛云等产品,开源的话,目前开源的分布式文件存储系统非常多,上网一搜 ...

  4. 如何分享文件_分布式文件存储系统如何分享文件

    今天说的就是QKFile分布式文件存储系统,既然是分布式系统,那么我们就要简单的科普一下分布式存储系统的结构及由来!请看下文 分布式共享存储(DSM)系统是将分散的存储系统通过网络连接起来的系统,兼有 ...

  5. 网络文件存储系统(一)网络文件存储系统的概述

    引言 文件系统是整个it中核心系统之一,如常见的图片,文档以及其他格式的文件都对存储无可避免,文件系统给我们带来了无限的便利,扩展了我们的网络空间,极大提高了我们的学习成效,使我们的生活变得多姿多彩. ...

  6. html中怎么在新窗口打开文件夹,如何解决文件夹总是在新窗口打开 三种办法解决文件夹总是在新窗口打开...

    之前用电脑打开文件夹时,都是在同一窗口,很方便,但是,不知何故,每次打开文件夹时,都会创建一个新窗口,如果文件路径很短,还只有二三个窗口,如果路径很长,要打开七八个窗口,甚至更多,而且后面还要一个一个 ...

  7. aws s3 獲取所有文件_通过Java上传下载AWS S3文件,并解决文件数量超过1000的问题...

    1 前言 Amazon S3 (Simple Storage Service)是很常用的文件存储服务,我们的场景是上游把流水文件放到S3,我们再从S3读取并对账. 2 初始化S3 首先要获取相关的账号 ...

  8. FastDfs分布式文件存储系统

    FastDfs分布式文件存储系统 FastDfs 是一个开源的高性能分布式文件系统(DFS). 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡.主要解决了海量数据存储问题,特别适 ...

  9. Docker部署Fastdfs分布式文件存储系统

    Docker部署Fastdfs分布式文件存储系统 Fastdfs分布式文件存储系统 拉取镜像 部署Tracker和Storage 开放端口 SpringBoot代码示例 Fastdfs分布式文件存储系 ...

最新文章

  1. sklearn.preprocessing下的数据标准化(scale、MinMaxScaler)
  2. Android 开发应该掌握的 Proguard 技巧
  3. python与excel的区别-python比较两个excel表格的差异
  4. nginx进程管理之master进程
  5. 在CentOS6.8下安装Docker
  6. CPC系统在win10上的安装,1小时快速安装
  7. win10如何在不同窗口切换
  8. 解决centos 7 打开php文件直接下载问题
  9. 非线性规划的对偶问题
  10. dubbo-admin的下载与安装
  11. flex 分类模块布局 (双排盒子布局 等比例 等间距)Vue绑定数据
  12. oracle如何打开控制文件,看一看oracle控制文件里面的内容
  13. 世界十大顶级黑客教父
  14. SAP 物料可用性检查
  15. cache是什么?作用是什么?位置在哪?
  16. 约瑟夫环问题【数组】标记法
  17. 老雷:思儿壮志小诗一首(老爸写得都比我好,让我这个文艺青年情何以堪)(家人对幸福美好生活的追求,就是我的奋斗目标)...
  18. pip安装matplotlib
  19. 图论 最大团,最大独立集
  20. MongoDB 最新安装教程

热门文章

  1. 从IT时代转入DT时代 安防应该注意什么?
  2. 首款Nordic蓝牙5.1室内定位SoC芯片nRF52811
  3. 智慧养老解决方案的背景
  4. 什么是高防ip?高防ip什么意思?
  5. SOR迭代法python实现
  6. 区块链如何助推著原创保护
  7. 重雷震 (易經大意 韓長庚)
  8. 4.kubernetes集群搭建
  9. .net开发安卓入门 - Hello world!
  10. Java分布式技术汇总