使用这个库,遇到不少问题,搜索加查看源码,暂时能用了~
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_ONE
th.pkg_len = FDFS_GROUP_NAME_MAX_LEN
th.send_header(conn)
group_fmt = '!%ds' % FDFS_GROUP_NAME_MAX_LEN
send_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)