fdfs_test.py 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # filename: fdfs_test.py
  4. import os, sys, time
  5. try:
  6. from fdfs_client.client import *
  7. from fdfs_client.exceptions import *
  8. except ImportError:
  9. import_path = os.path.abspath('../')
  10. sys.path.append(import_path)
  11. from fdfs_client.client import *
  12. from fdfs_client.exceptions import *
  13. def usage():
  14. s = 'Usage: python fdfs_test.py {options} [{local_filename} [{remote_file_id}]]\n'
  15. s += 'options: upfile, upbuffer, downfile, downbuffer, delete, listgroup, listserv\n'
  16. s += ' upslavefile, upslavebuffer, upappendfile, upappendbuffer\n'
  17. s += '\tupfile {local_filename}\n'
  18. s += '\tupbuffer {local_filename}\n'
  19. s += '\tdownfile {local_filename} {remote_file_id}\n'
  20. s += '\tdownbuffer {remote_file_id}\n'
  21. s += '\tdelete {remote_file_id}\n'
  22. s += '\tlistgroup {group_name}\n'
  23. s += '\tlistall \n'
  24. s += '\tlistsrv {group_name} [storage_ip]\n'
  25. s += '\tsetmeta {remote_file_id}\n'
  26. s += '\tgetmeta {remote_file_id}\n'
  27. s += '\tupslavefile {local_filename} {remote_fileid} {prefix_name}\n'
  28. s += '\tupappendfile {local_filename}\n'
  29. s += '\ttruncate {truncate_filesize} {remote_fileid}\n'
  30. s += '\tmodifyfile {local_filename} {remote_fileid} {file_offset}\n'
  31. s += '\tmodifybuffer {local_filename} {remote_fileid} {file_offset}\n'
  32. s += 'e.g.: python fdfs_test.py upfile test'
  33. print(s)
  34. sys.exit(0)
  35. if len(sys.argv) < 2:
  36. usage()
  37. client = Fdfs_client('client.conf')
  38. def upfile_func():
  39. # Upload by filename
  40. # usage: python fdfs_test.py upfile {local_filename}
  41. if len(sys.argv) < 3:
  42. usage()
  43. return None
  44. try:
  45. local_filename = sys.argv[2]
  46. file_size = os.stat(local_filename).st_size
  47. # meta_buffer can be null.
  48. meta_dict = {
  49. 'ext_name': 'py',
  50. 'file_size': str(file_size) + 'B'
  51. }
  52. t1 = time.time()
  53. ret_dict = client.upload_by_filename(local_filename, meta_dict)
  54. t2 = time.time()
  55. for key in ret_dict:
  56. print('[+] %s : %s' % (key, ret_dict[key]))
  57. print('[+] time consume: %fs' % (t2 - t1))
  58. except (ConnectionError, ResponseError, DataError) as e:
  59. print(e)
  60. def upfileex_func():
  61. # Upload by file
  62. # usage: python fdfs_test.py upfileex {local_filename}
  63. if len(sys.argv) < 3:
  64. usage()
  65. return None
  66. try:
  67. local_filename = sys.argv[2]
  68. t1 = time.time()
  69. ret_dict = client.upload_by_file(local_filename)
  70. t2 = time.time()
  71. for key in ret_dict:
  72. print('[+] %s : %s' % (key, ret_dict[key]))
  73. print('[+] time consume: %fs' % (t2 - t1))
  74. except (ConnectionError, ResponseError, DataError) as e:
  75. print(e)
  76. def upslavefile_func():
  77. # upload slave file
  78. # usage: python fdfs_test.py upslavefile {local_filename} {remote_fileid} {prefix_name}
  79. if len(sys.argv) < 5:
  80. usage()
  81. return None
  82. try:
  83. local_filename = sys.argv[2]
  84. remote_fileid = sys.argv[3]
  85. prefix_name = sys.argv[4]
  86. ret_dict = client.upload_slave_by_file(local_filename, remote_fileid,
  87. prefix_name)
  88. for key in ret_dict:
  89. print('[+] %s : %s' % (key, ret_dict[key]))
  90. except (ConnectionError, ResponseError, DataError) as e:
  91. print(e)
  92. def upslavebuffer_func():
  93. # upload slave by buffer
  94. # usage: python fdfs_test.py upslavebuffer {local_filename} {remote_fileid} {prefix_name}
  95. if len(sys.argv) < 5:
  96. usage()
  97. return None
  98. try:
  99. local_filename = sys.argv[2]
  100. remote_fileid = sys.argv[3]
  101. prefix_name = sys.argv[4]
  102. with open(local_filename, 'rb') as f:
  103. filebuffer = f.read()
  104. ret_dict = client.upload_slave_by_buffer(local_filename,
  105. remote_fileid, prefix_name)
  106. for key in ret_dict:
  107. print('[+] %s : %s' % (key, ret_dict[key]))
  108. except (ConnectionError, ResponseError, DataError) as e:
  109. print(e)
  110. def del_func():
  111. # delete file
  112. # usage: python fdfs_test.py delete {remote_fileid}
  113. if len(sys.argv) < 3:
  114. usage()
  115. return None
  116. try:
  117. remote_file_id = sys.argv[2]
  118. ret_tuple = client.delete_file(remote_file_id)
  119. print('[+] %s' % ret_tuple[0])
  120. print('[+] remote_fileid: %s' % ret_tuple[1])
  121. print('[+] Storage IP: %s' % ret_tuple[2])
  122. except (ConnectionError, ResponseError, DataError) as e:
  123. print(e)
  124. def downfile_func():
  125. # Download to file
  126. # usage: python fdfs_test.py downfile {local_filename} {remote_fileid}
  127. if len(sys.argv) < 3:
  128. usage()
  129. return None
  130. try:
  131. local_filename = sys.argv[2]
  132. remote_fileid = sys.argv[3]
  133. ret_dict = client.download_to_file(local_filename, remote_fileid)
  134. for key in ret_dict:
  135. print('[+] %s : %s' % (key, ret_dict[key]))
  136. except (ConnectionError, ResponseError, DataError) as e:
  137. print(e)
  138. def list_group_func():
  139. # List one group info
  140. # usage: python fdfs_test.py listgroup {group_name}
  141. if len(sys.argv) < 3:
  142. usage()
  143. return None
  144. try:
  145. group_name = sys.argv[2]
  146. ret = client.list_one_group(group_name)
  147. print(ret)
  148. except (ConnectionError, ResponseError, DataError) as e:
  149. print(e)
  150. def listall_func():
  151. # List all group info
  152. # usage: python fdfs_test.py listall
  153. if len(sys.argv) < 2:
  154. usage()
  155. return None
  156. try:
  157. ret_dict = client.list_all_groups()
  158. print('=' * 80)
  159. print('Groups count:', ret_dict['Groups count'])
  160. for li in ret_dict['Groups']:
  161. print('-' * 80)
  162. print(li)
  163. print('-' * 80)
  164. except (ConnectionError, ResponseError, DataError) as e:
  165. print(e)
  166. def list_server_func():
  167. # List all servers info of group
  168. # usage: python fdfs_test.py listsrv {group_name} [storage_ip]
  169. if len(sys.argv) < 3:
  170. usage()
  171. return None
  172. try:
  173. group_name = sys.argv[2]
  174. if len(sys.argv) > 3:
  175. storage_ip = sys.argv[3]
  176. else:
  177. storage_ip = None
  178. ret_dict = client.list_servers(group_name, storage_ip)
  179. print('=' * 80)
  180. print('Group name: %s' % ret_dict['Group name'])
  181. print('=' * 80)
  182. i = 1
  183. for serv in ret_dict['Servers']:
  184. print('Storage server %d:' % i)
  185. print('=' * 80)
  186. print(serv)
  187. i += 1
  188. print('=' * 80)
  189. except (ConnectionError, ResponseError, DataError) as e:
  190. print(e)
  191. def upbuffer_func():
  192. # Upload by buffer
  193. # usage: python fdfs_test.py upbuffer {local_filename} [remote_file_ext_name]
  194. if len(sys.argv) < 3:
  195. usage()
  196. return None
  197. local_filename = sys.argv[2]
  198. if len(sys.argv) > 3:
  199. ext_name = sys.argv[3]
  200. else:
  201. ext_name = None
  202. # meta_buffer can be null.
  203. meta_buffer = {
  204. 'ext_name': 'gif',
  205. 'width': '150px',
  206. 'height': '80px'
  207. }
  208. try:
  209. with open(local_filename, 'rb') as f:
  210. file_buffer = f.read()
  211. ret_dict = client.upload_by_buffer(file_buffer, ext_name, meta_buffer)
  212. for key in ret_dict:
  213. print('[+] %s : %s' % (key, ret_dict[key]))
  214. except (ConnectionError, ResponseError, DataError) as e:
  215. print(e)
  216. def downbuffer_func():
  217. # Download to buffer
  218. # usage: python fdfs_test.py downbuffer {remote_file_id}
  219. # e.g.: 'group1/M00/00/00/wKjzhU_rLNmjo2-1AAAamGDONEA5818.py'
  220. if len(sys.argv) < 3:
  221. usage()
  222. return None
  223. remote_fileid = sys.argv[2]
  224. try:
  225. ret_dict = client.download_to_buffer(remote_fileid)
  226. print('Downloaded content:')
  227. print(ret_dict['Content'])
  228. except (ConnectionError, ResponseError, DataError) as e:
  229. print(e)
  230. def get_meta_data_func():
  231. # Get meta data of remote file
  232. # usage python fdfs_test.py getmeta {remote_file_id}
  233. if len(sys.argv) < 3:
  234. usage()
  235. return None
  236. remote_fileid = sys.argv[2]
  237. try:
  238. ret_dict = client.get_meta_data(remote_fileid)
  239. print(ret_dict)
  240. except (ConnectionError, ResponseError, DataError) as e:
  241. print(e)
  242. def set_meta_data_func():
  243. # Set meta data of remote file
  244. # usage python fdfs_test.py setmeta {remote_file_id}
  245. if len(sys.argv) < 3:
  246. usage()
  247. return None
  248. remote_fileid = sys.argv[2]
  249. meta_dict = {
  250. 'ext_name': 'jgp',
  251. 'width': '160px',
  252. 'hight': '80px',
  253. }
  254. try:
  255. ret_dict = client.set_meta_data(remote_fileid, meta_dict)
  256. for key in ret_dict:
  257. print('[+] %s : %s' % (key, ret_dict[key]))
  258. except (ConnectionError, ResponseError, DataError) as e:
  259. print(e)
  260. def upappendfile_func():
  261. # Upload an appender file by filename
  262. # usage: python fdfs_test.py upappendfile {local_filename}
  263. if len(sys.argv) < 3:
  264. usage()
  265. return None
  266. local_filename = sys.argv[2]
  267. try:
  268. ret_dict = client.upload_appender_by_file(local_filename)
  269. for key in ret_dict:
  270. print('[+] %s : %s' % (key, ret_dict[key]))
  271. except (ConnectionError, ResponseError, DataError) as e:
  272. print(e)
  273. def upappendbuffer_func():
  274. # Upload an appender file by buffer
  275. # usage: python fdfs_test.py upappendbuffer {local_filename}
  276. if len(sys.argv) < 3:
  277. usage()
  278. return None
  279. local_filename = sys.argv[2]
  280. try:
  281. with open(local_filename, 'rb') as f:
  282. file_buffer = f.read()
  283. ret_dict = client.upload_appender_by_buffer(file_buffer)
  284. for key in ret_dict:
  285. print('[+] %s : %s' % (key, ret_dict[key]))
  286. except (ConnectionError, ResponseError, DataError) as e:
  287. print(e)
  288. def appendfile_func():
  289. # Append a remote file
  290. # usage: python fdfs_test.py appendfile {local_filename} {remote_file_id}
  291. if len(sys.argv) < 4:
  292. usage()
  293. return None
  294. local_filename = sys.argv[2]
  295. remote_fileid = sys.argv[3]
  296. try:
  297. ret_dict = client.append_by_file(local_filename, remote_fileid)
  298. for key in ret_dict:
  299. print('[+] %s : %s' % (key, ret_dict[key]))
  300. except (ConnectionError, ResponseError, DataError) as e:
  301. print(e)
  302. def appendbuffer_func():
  303. # Append a remote file by buffer
  304. # usage: python fdfs_test.py appendbuffer {local_filename} {remote_file_id}
  305. if len(sys.argv) < 4:
  306. usage()
  307. return None
  308. local_filename = sys.argv[2]
  309. remote_fileid = sys.argv[3]
  310. try:
  311. with open(local_filename, 'rb') as f:
  312. filebuffer = f.read()
  313. ret_dict = client.append_by_buffer(filebuffer, remote_fileid)
  314. for key in ret_dict:
  315. print('[+] %s : %s' % (key, ret_dict[key]))
  316. except (ConnectionError, ResponseError, DataError) as e:
  317. print(e)
  318. def truncate_func():
  319. # Truncate file
  320. # usage: python fdfs_test.py truncate {truncate_filesize} {remote_file_id}
  321. if len(sys.argv) < 4:
  322. usage()
  323. return None
  324. truncate_filesize = sys.argv[2]
  325. remote_fileid = sys.argv[3]
  326. try:
  327. ret_dict = client.truncate_file(truncate_filesize, remote_fileid)
  328. for key in ret_dict:
  329. print('[+] %s : %s' % (key, ret_dict[key]))
  330. except (ConnectionError, ResponseError, DataError) as e:
  331. print(e)
  332. def modifyfile_func():
  333. # Modify file by filename
  334. # usage: python fdfs_test.py modifyfile {local_filename} {remote_fileid} [file_offset]
  335. if len(sys.argv) < 4:
  336. usage()
  337. return None
  338. local_filename = sys.argv[2]
  339. remote_fileid = sys.argv[3]
  340. if len(sys.argv) > 4:
  341. file_offset = sys.argv[4]
  342. else:
  343. file_offset = 0
  344. try:
  345. ret_dict = client.modify_by_filename(local_filename, remote_fileid, file_offset)
  346. for key in ret_dict:
  347. print('[+] %s : %s' % (key, ret_dict[key]))
  348. except (ConnectionError, ResponseError, DataError) as e:
  349. print(e)
  350. def modifybuffer_func():
  351. # Modify file by buffer
  352. # usage: python fdfs_test.py modifybuffer {local_filename} {remote_fileid} [file_offset]
  353. if len(sys.argv) < 4:
  354. usage()
  355. return None
  356. local_filename = sys.argv[2]
  357. remote_fileid = sys.argv[3]
  358. if len(sys.argv) > 4:
  359. file_offset = sys.argv[4]
  360. else:
  361. file_offset = 0
  362. try:
  363. with open(local_filename, 'rb') as f:
  364. filebuffer = f.read()
  365. ret_dict = client.modify_by_buffer(filebuffer, remote_fileid, file_offset)
  366. for key in ret_dict:
  367. print('[+] %s : %s' % (key, ret_dict[key]))
  368. except (ConnectionError, ResponseError, DataError) as e:
  369. print(e)
  370. result = {
  371. 'upfile': lambda: upfile_func(),
  372. 'upfileex': lambda: upfileex_func(),
  373. 'upbuffer': lambda: upbuffer_func(),
  374. 'delete': lambda: del_func(),
  375. 'downfile': lambda: downfile_func(),
  376. 'downbuffer': lambda: downbuffer_func(),
  377. 'listgroup': lambda: list_group_func(),
  378. 'listall': lambda: listall_func(),
  379. 'listsrv': lambda: list_server_func(),
  380. 'getmeta': lambda: get_meta_data_func(),
  381. 'setmeta': lambda: set_meta_data_func(),
  382. 'upslavefile': lambda: upslavefile_func(),
  383. 'upappendfile': lambda: upappendfile_func(),
  384. 'upappendbuffer': lambda: upappendbuffer_func(),
  385. 'appendfile': lambda: appendfile_func(),
  386. 'appendbuffer': lambda: appendbuffer_func(),
  387. 'truncate': lambda: truncate_func(),
  388. 'modifyfile': lambda: modifyfile_func(),
  389. 'modifybuffer': lambda: modifybuffer_func(),
  390. '-h': lambda: usage(),
  391. }[sys.argv[1].lower()]()