py3Fdfs 修复几个bug

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

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)
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用Java操作FastDFS,你需要引入FastDFS的Java客户端库。可以使用Maven或者直接下载jar包的方式导入库文件。在pom.xml文件中添加以下依赖项: ``` <dependency> <groupId>net.oschina.zcx7878</groupId> <artifactId>fastdfs-client-java</artifactId> <version>1.27.0.0</version> </dependency> ``` 然后,你需要编写一个Java工具类来操作FastDFS。可以参考以下代码: ``` import java.io.IOException; import org.csource.common.MyException; import org.csource.fastdfs.ClientGlobal; import org.csource.fastdfs.FileInfo; import org.csource.fastdfs.StorageClient; import org.csource.fastdfs.StorageServer; import org.csource.fastdfs.TrackerClient; import org.csource.fastdfs.TrackerServer; public class FastDfsUtil { private static TrackerClient trackerClient = null; private static TrackerServer trackerServer = null; private static StorageServer storageServer = null; private static StorageClient storageClient = null; static { try { ClientGlobal.init("fdfs_client.conf"); trackerClient = new TrackerClient(); trackerServer = trackerClient.getConnection(); storageClient = new StorageClient(trackerServer, storageServer); } catch (Exception e) { e.printStackTrace(); System.out.println("FDFS工具初始化失败!"); } } public static FileInfo getFileInfo(String savepath) throws IOException, MyException { String group = ""; // 存储组 String path = ""; // 存储路径 try { int secondIndex = savepath.indexOf("/", 2); // 第二个"/"索引位置 group = savepath.substring(1, secondIndex); // 类似:group1 path = savepath.substring(secondIndex + 1); // 类似:M00/00/00/wKgBaFv9Ad-Abep_AAUtbU7xcws013.png } catch (Exception e) { throw new RuntimeException("传入文件存储路径不正确!格式例如:/group1/M00/00/00/wKgBaFv9Ad-Abep_AAUtbU7xcws013.png"); } FileInfo fileInfo = storageClient.get_file_info(group, path); return fileInfo; } } ``` 在上述代码中,我们使用FastDFS的Java客户端库,初始化一个TrackerClient、TrackerServer和StorageClient实例。然后,可以调用getFileInfo方法来获取文件信息,传入文件的存储路径作为参数。该方法会返回一个FileInfo对象,包含了文件的信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值