fdfs_test.py 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420
  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), 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), 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), 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), 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), 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), 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), 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), 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), 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), 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), 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), 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), 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), 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), 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), 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), 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 = long(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), 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 = long(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), 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 = long(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), 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()]()