使用这个库,遇到不少问题,搜索加查看源码,暂时能用了~

py3Fdfs 2.2.0

安装:pip install py3Fdfs

TypeError: type object argument after ** must be a mapping, not str

调整代码为:

#由配置文件中的信息得到字典trackers
trackers = get_tracker_conf('../config/fdfs_client.conf')
self.client = Fdfs_client(trackers)

download_to_file(local_filename, remote_file_id),提示must be bytes[], not str

看源代码发现,在utils.py 222行

index = remote_file_id.find(b'/')

但是注意,这里去掉’b’,后面还有很多错误。
仔细查询后发现,是struct格式化字符串的问题,在python3发生了变化。utils.py还原~

Python3 struct格式化


在python2中’s’是string类型,改为了bytes,进参前做encoding:

remote_file_id = remote_file_id.encode(encoding='utf-8')

下载30k文件出现socket超时

使用donwload_to_file出现;反复尝试,无奈换一个方法调用donwload_to_filebuffer

增加上传文件指定group

发现api中,无对应方法。
位置:D:\ProgramData\Anaconda3\Lib\site-packages\fdfs_client

阅读源代码后发现在tracker_client.py中有方法获取group,如下:

def tracker_query_storage_stor_with_group(self, group_name):'''Query storage server for upload, based group name.arguments:@group_name: string@Return Storage_server object'''conn = self.pool.get_connection()th = Tracker_header()th.cmd = TRACKER_PROTO_CMD_SERVICE_QUERY_STORE_WITH_GROUP_ONEth.pkg_len = FDFS_GROUP_NAME_MAX_LENth.send_header(conn)group_fmt = '!%ds' % FDFS_GROUP_NAME_MAX_LENsend_buffer = struct.pack(group_fmt, group_name)try:tcp_send_data(conn, send_buffer)th.recv_header(conn)if th.status != 0:raise DataError('Error: %d, %s' % (th.status, os.strerror(th.status)))recv_buffer, recv_size = tcp_recv_response(conn, th.pkg_len)if recv_size != TRACKER_QUERY_STORAGE_STORE_BODY_LEN:errmsg = '[-] Error: Tracker response length is invaild, 'errmsg += 'expect: %d, actual: %d' % (TRACKER_QUERY_STORAGE_STORE_BODY_LEN, recv_size)raise ResponseError(errmsg)except ConnectionError:raisefinally:self.pool.release(conn)# recv_fmt: |-group_name(16)-ipaddr(16-1)-port(8)-store_path_index(1)-|recv_fmt = '!%ds %ds Q B' % (FDFS_GROUP_NAME_MAX_LEN, IP_ADDRESS_SIZE - 1)store_serv = Storage_server()(group, ip_addr, store_serv.port, store_serv.store_path_index) = struct.unpack(recv_fmt, recv_buffer)store_serv.group_name = group.strip(b'\x00')store_serv.ip_addr = ip_addr.strip(b'\x00')return store_serv

在client.py中增加一个新的方法,注意这里的参数group_name仍然需要转换为bytes[]

 # 指定group上传文件def upload_by_filename_with_gourp(self, filename, group_name, meta_dict=None):isfile, errmsg = fdfs_check_file(filename)if not isfile:raise DataError(errmsg + '(uploading)')tc = Tracker_client(self.tracker_pool)store_serv = tc.tracker_query_storage_stor_with_group(group_name)store = Storage_client(store_serv.ip_addr, store_serv.port, self.timeout)return store.storage_upload_by_filename(tc, store_serv, filename, meta_dict)# 指定group上传可追加文件def upload_appender_by_filename_with_group(self, local_filename, group_name, meta_dict=None):isfile, errmsg = fdfs_check_file(local_filename)if not isfile:raise DataError(errmsg + '(uploading appender)')tc = Tracker_client(self.tracker_pool)store_serv = tc.tracker_query_storage_stor_with_group(group_name)store = Storage_client(store_serv.ip_addr, store_serv.port, self.timeout)return store.storage_upload_appender_by_filename(tc, store_serv, local_filename, meta_dict)

部分代码

# -*- coding: utf-8 -*-
"""
Created on Wed Jul 24 14:31:45 2019@author: yk
"""from config.loki_config import lcfg
import os
from fdfs_client.client import Fdfs_client, get_tracker_confclass FDfsClient(object):def __init__(self):# 由配置文件中的信息,得到字典trackerstrackers = get_tracker_conf(lcfg.FDFS_PATH)self.client = Fdfs_client(trackers)def upload_filename(self, file_path):res = self.client.upload_by_filename(file_path)if res.get('Status') != 'Upload successed.':raise Exception('upload file to fastdfs failed. path:{}'.format(file_path))filename = res.get('Remote file_id')return filename.decode()def upload_filename_with_group(self, file_path, group_name=lcfg.FDFS_GROUP_NAME):group_name = group_name.encode(encoding='utf-8')res = self.client.upload_by_filename_with_gourp(file_path, group_name)if res.get('Status') != 'Upload successed.':raise Exception('upload file to fastdfs failed. path:{}'.format(file_path))filename = res.get('Remote file_id')return filename.decode()# 上传文件使其后续可以追加,修改等def upload_appender_by_filename(self, file_path):res = self.client.upload_appender_by_filename(file_path)if res.get('Status') != 'Upload successed.':raise Exception('upload_appender file to fastdfs failed. path:{}'.format(file_path))filename = res.get('Remote file_id')return filename.decode()# 追加文件内容def append_by_filename(self, file_path, remote_file_id):remote_file_id = remote_file_id.encode(encoding='utf-8')res = self.client.append_by_filename(file_path, remote_file_id)if res.get('Status') != 'Append file successed.':raise Exception('append file to fastdfs failed. file_path: {} || remote_file_id:{}'.format(file_path, remote_file_id))def download_file(self, local_path, remote_file_id):filename = remote_file_id.split('/')[-1]remote_file_id = remote_file_id.encode(encoding='utf-8')filename = os.path.join(local_path, filename)res = self.client.download_to_buffer(remote_file_id)with open(filename, mode='ab+') as f:f.write(res.get('Content'))return filenameraise Exception('download file from fastdfs failed. remote_id:{}'.format(remote_file_id))def list_all_groups(self):return self.client.list_all_groups()def main():filename = r'D:\workspace\iot-loki\util\1.txt'group_name = 'group1'fdfs_client = FDfsClient()
#    res = fdfs_client.upload_filename(filename)res = fdfs_client.upload_appender_by_filename(filename)print(res)#    local = r"D:\workspace\iot-loki\util\1.txt"
##    remote_id = "/sampling/ts/20191223/AACHD52496857/1577080025-1577080035.ts"
#    remote_id = "group1/M00/04/7A/Ct39y14DDtuEEEEGAAAAAPvT3Cw584.txt"
#    res = fdfs_client.append_by_filename(local, remote_id)
#    res = fdfs_client.download_file('./', 'group1/M00/04/7A/Ct39y14DDtuEEEEGAAAAAPvT3Cw584.txt')
#    print(res)if __name__ == '__main__':main()

部署替换linux下文件

找到对应包安装路径,使用命令:pip show py3Fdfs
获得信息:

Name: py3Fdfs
Version: 2.2.0
Summary: Python3 and Python2 client for Fastdfs
Home-page: http://www.google.com
Author: wwb
Author-email: 416713448@qq.com
License: GPLV3
Location: /usr/local/python3.6.8/lib/python3.6/site-packages
Requires:
Required-by:

到对应路径找到fdfs_client文件夹,将本地client.py替换上就好了。

py3Fdfs 修复几个bug相关推荐

  1. 自动检索、修复Python代码bug,微软推出DeepDebug

    视学算法报道 机器之心编辑部 还在为不断的 debug 代码烦恼吗? 本地化 Bug 并修复程序是软件开发过程中的重要任务.在本篇论文中,来自微软 Cloud+AI 部门的研究者介绍了 DeepDeb ...

  2. iOS 11.2 版本紧急修复黑屏 Bug,却遇 FaceID 识别错误,真实原因在此

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 自 12 月 1 日起,陆续有很多苹果用户反映搭载 iOS 11.1.2 的 iPhone ...

  3. 10个修复ie6下bug技巧[转]

    ie6的末日即将来临,对我们前端开发人员来说,无疑是一个慰藉人心的喜讯.但这个末日也并非朝日可至,所以我们还是争取最后的胜利,用各种hack和方法来规避ie6下双边距,背景透明,重复文字等等一堆bug ...

  4. 华为 AI 芯片诞生;马云重当中国首富;微软修复数据删除 Bug | 极客头条

    「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有料的新闻资讯,让所有技术人,时刻紧跟业界潮流. 快讯速知 华 ...

  5. ASP.NET Identity 2新增双重认证、帐号锁定、防伪印章功能并修复了一些bug

    Microsoft最近发布了ASP.NET Identity 2,该版本支持双重认证.帐号锁定以及防伪印章功能,还增强了用户帐号和索引.此外新版本还包含一个改进的密码验证器并修复了一些bug. 借助于 ...

  6. switch更新找不到服务器,任天堂Switch最新系统更新 修复数字商店bug

    任天堂Switch已经收到了最新的系统更新,虽然体积不大,但它将修复一些玩家反馈的数字商店bug. 版本12.0.3.于昨天发布,根据任天堂官方补丁说明,它添加的只是"一般系统稳定性改进以增 ...

  7. dnf韩服服务器维护中,dnf韩服正式服8月20日更新汇总 修复各职业技能BUG

    本文导航第1页: 8月20日修复内容介绍 8月20日修复内容介绍 dnf韩服正式服8月20日更新汇总 修复各职业技能BUG,看看有哪些内容更新维护吧. 8月20日(四)预定进行定期维护 以下公告 ■ ...

  8. lol8.18服务器不稳定,lol8月18日更新BUG修复一览 8月18日更新修复了哪些BUG

    lol8月18日更新BUG修复一览,8月18日更新修复了哪些BUG?lol英雄联盟在8月18日进行了版本的维护更新,同时也修复了部分的BUG,那么都有哪些BUG呢?下面就和小编一起来看看吧. 8月18 ...

  9. 苹果系统又更新了,iOS13.1.3修复了哪些Bug?为啥对系统频繁修复

    在昨日凌晨,也就是16日0时,苹果公司对iOS13系统再次进行了推送,此次推送的版本为iOS13.1.3.小酱会在稍后为大家讲解此次更新都修复的了哪些Bug,昨日不少网友也表示:这是iOS13版本的第 ...

  10. 王者荣耀服务器维护5.3,王者荣耀3月5日更新修复5个bug 王者荣耀bug修复介绍

    王者荣耀在3月5日再次进行了更新,这次更新不仅上线了N多福利,而且还对游戏进行了调整,更是一口气修复了游戏中的5个bug.那么,王者荣耀最新修复了哪些bug呢?bug修复后有什么好处呢? 王者荣耀3月 ...

最新文章

  1. linux gcc 显示/禁用 所有警告
  2. shell实例第9讲:判断用户输入的是否为IP地址
  3. wxWidgets学习 (2) -- 事件处理
  4. ajax初试,获取数据
  5. 阿里云免费申请免费SSL证书
  6. Android 动态绘制曲线等各种图形
  7. Swift3.0 键盘高度监听获取
  8. C#中使用Buffer.BlockCopy()方法将string转换为byte array的方法:
  9. 染色法判断是否是二分图
  10. 【 js 算法类】这么全的数组去重,你怕不怕?
  11. arcgis api 3.X 实现加载百度矢量地图和百度影像地图
  12. 数学建模 —— 自回归模型
  13. 通用时与儒略日代码解析
  14. Linux上查找最大文件的 3 种方法
  15. 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323
  16. s3c2416 AT070TN83的LCD wince6.0驱动移植
  17. 电脑只能上QQ,不能上网浏览网站怎么解决
  18. adb和frida的一点简单使用记录
  19. Word/WPS 利用邮件合并批量生成文档
  20. 线性代数(十一) : 列空间与零空间的进一步介绍

热门文章

  1. 【硬件测评】电脑测评工具箱及方法汇总
  2. 【解决方案 十八】连接已重置怎么办
  3. 【C语言】从放弃到入门-笔记
  4. Badboy下载地址
  5. 基于单片机智能交通灯控制系统设计外文文献_三种典型的微机控制系统
  6. 初学者都能看懂的蒙特卡洛方法以及python实现
  7. 卫星影像的分辨率与成图比例尺
  8. WPS如何设置快捷键|为设置颜色添加快捷键
  9. WPS文字常用排版快捷键
  10. 微信发红包功能的测试用例