現有的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()
