Python3與FastDFS交互(py3Fdfs)


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

  

  

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM