現有的FastDFS數據庫與python交互, 多是通過下載fdfs-client-py,pip本地安裝.
不過該模塊只適用於Python2, 且適配FastDFS版本較為古老.
在Python3中, 有相對應的py3fdfs模塊
安裝
pip install py3Fdfs
py3fdfs源於fdfs-client,但在使用過程中, 和舊版略有不同.(py3fdfs官網示例有誤)
創建client實例對象的時候不能直接傳入配置文件的地址字符串,否則報錯.
錯誤代碼:TypeError: type object argument after ** must be a mapping, not str
通過模塊內get_tracker_conf函數, 獲取配置文件后傳入.
例:
from fdfs_client.client import Fdfs_client, get_tracker_conf tracker_path = get_tracker_conf('/etc/fdfs/client.conf') client = Fdfs_client(tracker_path) ret = client.upload_by_filename('./test') print(ret)
!# 上傳成功后返回的字典內, 其中'Remote file_id'鍵對應的值由舊版模塊string類型更改為byte類型.
則, 返回的文件id是byte類型
如果項目中有自定義上傳類, 需要解碼返回的文件id為字符串,否則服務器報錯.
錯誤代碼:a bytes-like object is required, not 'str'
例:
class FastDFSStorage(Storage): '''自定義上傳類''' def _save(self, name, content): '''_save方法''' conf_path = get_tracker_conf('./utils/fdfs/client.conf') client = Fdfs_client(conf_path) result = client.upload_by_buffer(content.read()) if result.get('Status') != 'Upload successed.': raise Exception('上傳文件到FastDFS失敗') filename = result.get('Remote file_id') # return filename # return str(filename) return filename.decode()