2020-08-30

在自己的虚拟环境下,把ngnix以及fastdfs安装成功后。

workon django_py3(进入你的虚拟环境 workon 环境名称)

直接pip install fdfs_client-py-master,

再pip install py3fdfs。

现在进入Python交互式,如果按照之前的做法:

>>> from fdfs_client.client import Fdfs_client

>>> client = Fdfs_client('/etc/fdfs/client.conf')

>>> ret = client.upload_by_filename('test')

>>> ret

{'Group name':'group1','Status':'Upload successed.', 'Remote file_id':'group1/M00/00/00/

         wKjzh0_xaR63RExnAAAaDqbNk5E1398.py','Uploaded size':'6.0KB','Local file name':'test'

         , 'Storage IP':'192.168.243.133'}

但是实际上却会出现如下报错

(bj18_py3) python@ubuntu:~$ python
Python 3.5.2 (default, Jul  5 2016, 12:43:10) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from fdfs_client.client import Fdfs_client
>>> client = Fdfs_client('/etc/fdfs/client.conf')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/python/.virtualenvs/bj18_py3/lib/python3.5/site-packages/fdfs_client/client.py", line 51, in __init__
    self.tracker_pool = poolclass(**self.trackers)
TypeError: type object argument after ** must be a mapping, not str
>>> 

我们通过查看django源代码可以知道

class Fdfs_client(object):
 42     '''
 43     Class Fdfs_client implemented Fastdfs client protol ver 3.08.
 44 
 45     It's useful upload, download, delete file to or from fdfs server, etc. I    t's uses
 46     connection pool to manage connection to server.
 47     '''
 48 
 49     def __init__(self, trackers, poolclass=ConnectionPool):
 50         self.trackers = trackers
 51         self.tracker_pool = poolclass(**self.trackers)
 52         self.timeout = self.trackers['timeout']
 53         return None
以及同文件下的get_tracker_conf函数

def get_tracker_conf(conf_path='client.conf'):
 20     cf = Fdfs_ConfigParser()
 21     tracker = {}
 22     try:
 23         cf.read(conf_path)
 24         timeout = cf.getint('__config__', 'connect_timeout')
 25         tracker_list = cf.get('__config__', 'tracker_server')
 26         if isinstance(tracker_list, str):
 27             tracker_list = [tracker_list]
 28         tracker_ip_list = []
 29         for tr in tracker_list:
 30             tracker_ip, tracker_port = tr.split(':')
 31             tracker_ip_list.append(tracker_ip)
 32         tracker['host_tuple'] = tuple(tracker_ip_list)
 33         tracker['port'] = int(tracker_port)
 34         tracker['timeout'] = timeout
 35         tracker['name'] = 'Tracker Pool'
 36     except:
 37         raise
 38     return tracker

由此可知,传递Fdfs+client需要的四个参数,ip port timeout name

client = Fdfs_client({'host_tuple': ['写你自己虚拟机里面的IP地址'], 'port': 22122, 'timeout': 30, 'name': 'Tracker Pool'})

你以为这样就完了么,下面还会报错

>>> from fdfs_client.client import Fdfs_client>>> client = Fdfs_client({'host_tuple': ['192.168.64.132'], 'port': 22122, 'timeout': 30, 'name': 'Tracker Pool'})
>>> ret = client.upload_by_filename('test')Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/python/.virtualenvs/bj18_py3/lib/python3.5/site-packages/fdfs_client/client.py", line 84, in upload_by_filename
    raise DataError(errmsg + '(uploading)')
fdfs_client.exceptions.DataError: [-] Error: test is not a file.(uploading)

查看client.py后,发现应该保存并使用已有的文件 绝对路径 ret = client.upload_by_filename( ) 括号里面填写的是要在你本机存在的文件名或者文件路径,或者在当前路径下拥有你需要上传的文件。最终结果如下

>>> from fdfs_client.client import Fdfs_client
>>> client = Fdfs_client({'host_tuple': ['192.168.64.132'], 'port': 22122, 'timeout': 30, 'name': 'Tracker Pool'})
>>> ret = client.upload_by_filename('12.txt')
>>> ret
{'Uploaded size': '10B', 'Status': 'Upload successed.', 'Remote file_id': b'group1/M00/00/00/wKhAhF9LG7iAXGoxAAAACjFO5Bc698.txt', 'Local file name': '12.txt', 'Storage IP': b'192.168.64.132', 'Group name': b'group1'

最后Python与fastdfs交互成功。进入新建django项目联合起来

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值