123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- # filename: fdfs_test.py
- import os, sys, time
- try:
- from fdfs_client.client import *
- from fdfs_client.exceptions import *
- except ImportError:
- import_path = os.path.abspath('../')
- sys.path.append(import_path)
- from fdfs_client.client import *
- from fdfs_client.exceptions import *
- def usage():
- s = 'Usage: python fdfs_test.py {options} [{local_filename} [{remote_file_id}]]\n'
- s += 'options: upfile, upbuffer, downfile, downbuffer, delete, listgroup, listserv\n'
- s += ' upslavefile, upslavebuffer, upappendfile, upappendbuffer\n'
- s += '\tupfile {local_filename}\n'
- s += '\tupbuffer {local_filename}\n'
- s += '\tdownfile {local_filename} {remote_file_id}\n'
- s += '\tdownbuffer {remote_file_id}\n'
- s += '\tdelete {remote_file_id}\n'
- s += '\tlistgroup {group_name}\n'
- s += '\tlistall \n'
- s += '\tlistsrv {group_name} [storage_ip]\n'
- s += '\tsetmeta {remote_file_id}\n'
- s += '\tgetmeta {remote_file_id}\n'
- s += '\tupslavefile {local_filename} {remote_fileid} {prefix_name}\n'
- s += '\tupappendfile {local_filename}\n'
- s += '\ttruncate {truncate_filesize} {remote_fileid}\n'
- s += '\tmodifyfile {local_filename} {remote_fileid} {file_offset}\n'
- s += '\tmodifybuffer {local_filename} {remote_fileid} {file_offset}\n'
- s += 'e.g.: python fdfs_test.py upfile test'
- print s
- sys.exit(0)
- if len(sys.argv) < 2:
- usage()
- client = Fdfs_client('client.conf')
- def upfile_func():
- # Upload by filename
- # usage: python fdfs_test.py upfile {local_filename}
- if len(sys.argv) < 3:
- usage()
- return None
- try:
- local_filename = sys.argv[2]
- file_size = os.stat(local_filename).st_size
- # meta_buffer can be null.
- meta_dict = {
- 'ext_name' : 'py',
- 'file_size' : str(file_size) + 'B'
- }
- t1 = time.time()
- ret_dict = client.upload_by_filename(local_filename, meta_dict)
- t2 = time.time()
- for key in ret_dict:
- print '[+] %s : %s' % (key, ret_dict[key])
- print '[+] time consume: %fs' % (t2 - t1)
- except (ConnectionError, ResponseError, DataError), e:
- print e
- def upfileex_func():
- # Upload by file
- # usage: python fdfs_test.py upfileex {local_filename}
- if len(sys.argv) < 3:
- usage()
- return None
- try:
- local_filename = sys.argv[2]
- t1 = time.time()
- ret_dict = client.upload_by_file(local_filename)
- t2 = time.time()
- for key in ret_dict:
- print '[+] %s : %s' % (key, ret_dict[key])
- print '[+] time consume: %fs' % (t2 - t1)
- except (ConnectionError, ResponseError, DataError), e:
- print e
- def upslavefile_func():
- # upload slave file
- # usage: python fdfs_test.py upslavefile {local_filename} {remote_fileid} {prefix_name}
- if len(sys.argv) < 5:
- usage()
- return None
- try:
- local_filename = sys.argv[2]
- remote_fileid = sys.argv[3]
- prefix_name = sys.argv[4]
- ret_dict = client.upload_slave_by_file(local_filename, remote_fileid, \
- prefix_name)
- for key in ret_dict:
- print '[+] %s : %s' % (key, ret_dict[key])
- except (ConnectionError, ResponseError, DataError), e:
- print e
- def upslavebuffer_func():
- # upload slave by buffer
- # usage: python fdfs_test.py upslavebuffer {local_filename} {remote_fileid} {prefix_name}
- if len(sys.argv) < 5:
- usage()
- return None
- try:
- local_filename = sys.argv[2]
- remote_fileid = sys.argv[3]
- prefix_name = sys.argv[4]
- with open(local_filename, 'rb') as f:
- filebuffer = f.read()
- ret_dict = client.upload_slave_by_buffer(local_filename, \
- remote_fileid, prefix_name)
- for key in ret_dict:
- print '[+] %s : %s' % (key, ret_dict[key])
- except (ConnectionError, ResponseError, DataError), e:
- print e
-
-
- def del_func():
- # delete file
- # usage: python fdfs_test.py delete {remote_fileid}
- if len(sys.argv) < 3:
- usage()
- return None
- try:
- remote_file_id = sys.argv[2]
- ret_tuple = client.delete_file(remote_file_id)
- print '[+] %s' % ret_tuple[0]
- print '[+] remote_fileid: %s' % ret_tuple[1]
- print '[+] Storage IP: %s' % ret_tuple[2]
- except (ConnectionError, ResponseError, DataError), e:
- print e
- def downfile_func():
- # Download to file
- # usage: python fdfs_test.py downfile {local_filename} {remote_fileid}
- if len(sys.argv) < 3:
- usage()
- return None
- try:
- local_filename = sys.argv[2]
- remote_fileid = sys.argv[3]
- ret_dict = client.download_to_file(local_filename, remote_fileid)
- for key in ret_dict:
- print '[+] %s : %s' % (key, ret_dict[key])
- except (ConnectionError, ResponseError, DataError), e:
- print e
- def list_group_func():
- # List one group info
- # usage: python fdfs_test.py listgroup {group_name}
- if len(sys.argv) < 3:
- usage()
- return None
- try:
- group_name = sys.argv[2]
- ret = client.list_one_group(group_name)
- print ret
- except (ConnectionError, ResponseError, DataError), e:
- print e
- def listall_func():
- # List all group info
- # usage: python fdfs_test.py listall
- if len(sys.argv) < 2:
- usage()
- return None
- try:
- ret_dict = client.list_all_groups()
- print '=' * 80
- print 'Groups count:', ret_dict['Groups count']
- for li in ret_dict['Groups']:
- print '-' * 80
- print li
- print '-' * 80
- except (ConnectionError, ResponseError, DataError), e:
- print e
- def list_server_func():
- # List all servers info of group
- # usage: python fdfs_test.py listsrv {group_name} [storage_ip]
- if len(sys.argv) < 3:
- usage()
- return None
- try:
- group_name = sys.argv[2]
- if len(sys.argv) > 3:
- storage_ip = sys.argv[3]
- else:
- storage_ip = None
- ret_dict = client.list_servers(group_name, storage_ip)
- print '=' * 80
- print 'Group name: %s' % ret_dict['Group name']
- print '=' * 80
- i = 1
- for serv in ret_dict['Servers']:
- print 'Storage server %d:' % i
- print '=' * 80
- print serv
- i += 1
- print '=' * 80
- except (ConnectionError, ResponseError, DataError), e:
- print e
- def upbuffer_func():
- # Upload by buffer
- # usage: python fdfs_test.py upbuffer {local_filename} [remote_file_ext_name]
- if len(sys.argv) < 3:
- usage()
- return None
- local_filename = sys.argv[2]
- if len(sys.argv) > 3:
- ext_name = sys.argv[3]
- else:
- ext_name = None
- # meta_buffer can be null.
- meta_buffer = {
- 'ext_name' : 'gif',
- 'width' : '150px',
- 'height' : '80px'
- }
- try:
- with open(local_filename, 'rb') as f:
- file_buffer = f.read()
- ret_dict = client.upload_by_buffer(file_buffer, ext_name, meta_buffer)
- for key in ret_dict:
- print '[+] %s : %s' % (key, ret_dict[key])
- except (ConnectionError, ResponseError, DataError), e:
- print e
- def downbuffer_func():
- # Download to buffer
- # usage: python fdfs_test.py downbuffer {remote_file_id}
- # e.g.: 'group1/M00/00/00/wKjzhU_rLNmjo2-1AAAamGDONEA5818.py'
- if len(sys.argv) < 3:
- usage()
- return None
- remote_fileid = sys.argv[2]
- try:
- ret_dict = client.download_to_buffer(remote_fileid)
- print 'Downloaded content:'
- print ret_dict['Content']
- except (ConnectionError, ResponseError, DataError), e:
- print e
- def get_meta_data_func():
- # Get meta data of remote file
- # usage python fdfs_test.py getmeta {remote_file_id}
- if len(sys.argv) < 3:
- usage()
- return None
- remote_fileid = sys.argv[2]
- try:
- ret_dict = client.get_meta_data(remote_fileid)
- print ret_dict
- except (ConnectionError, ResponseError, DataError), e:
- print e
- def set_meta_data_func():
- # Set meta data of remote file
- # usage python fdfs_test.py setmeta {remote_file_id}
- if len(sys.argv) < 3:
- usage()
- return None
- remote_fileid = sys.argv[2]
- meta_dict = {
- 'ext_name' : 'jgp',
- 'width' : '160px',
- 'hight' : '80px',
- }
- try:
- ret_dict = client.set_meta_data(remote_fileid, meta_dict)
- for key in ret_dict:
- print '[+] %s : %s' % (key, ret_dict[key])
- except (ConnectionError, ResponseError, DataError), e:
- print e
- def upappendfile_func():
- # Upload an appender file by filename
- # usage: python fdfs_test.py upappendfile {local_filename}
- if len(sys.argv) < 3:
- usage()
- return None
- local_filename = sys.argv[2]
- try:
- ret_dict = client.upload_appender_by_file(local_filename)
- for key in ret_dict:
- print '[+] %s : %s' % (key, ret_dict[key])
- except (ConnectionError, ResponseError, DataError), e:
- print e
- def upappendbuffer_func():
- # Upload an appender file by buffer
- # usage: python fdfs_test.py upappendbuffer {local_filename}
- if len(sys.argv) < 3:
- usage()
- return None
- local_filename = sys.argv[2]
- try:
- with open(local_filename, 'rb') as f:
- file_buffer = f.read()
- ret_dict = client.upload_appender_by_buffer(file_buffer)
- for key in ret_dict:
- print '[+] %s : %s' % (key, ret_dict[key])
- except (ConnectionError, ResponseError, DataError), e:
- print e
- def appendfile_func():
- # Append a remote file
- # usage: python fdfs_test.py appendfile {local_filename} {remote_file_id}
- if len(sys.argv) < 4:
- usage()
- return None
- local_filename = sys.argv[2]
- remote_fileid = sys.argv[3]
- try:
- ret_dict = client.append_by_file(local_filename, remote_fileid)
- for key in ret_dict:
- print '[+] %s : %s' % (key, ret_dict[key])
- except (ConnectionError, ResponseError, DataError), e:
- print e
- def appendbuffer_func():
- # Append a remote file by buffer
- # usage: python fdfs_test.py appendbuffer {local_filename} {remote_file_id}
- if len(sys.argv) < 4:
- usage()
- return None
- local_filename = sys.argv[2]
- remote_fileid = sys.argv[3]
- try:
- with open(local_filename, 'rb') as f:
- filebuffer = f.read()
- ret_dict = client.append_by_buffer(filebuffer, remote_fileid)
- for key in ret_dict:
- print '[+] %s : %s' % (key, ret_dict[key])
- except (ConnectionError, ResponseError, DataError), e:
- print e
- def truncate_func():
- # Truncate file
- # usage: python fdfs_test.py truncate {truncate_filesize} {remote_file_id}
- if len(sys.argv) < 4:
- usage()
- return None
- truncate_filesize = long(sys.argv[2])
- remote_fileid = sys.argv[3]
- try:
- ret_dict = client.truncate_file(truncate_filesize, remote_fileid)
- for key in ret_dict:
- print '[+] %s : %s' % (key, ret_dict[key])
- except (ConnectionError, ResponseError, DataError), e:
- print e
- def modifyfile_func():
- # Modify file by filename
- # usage: python fdfs_test.py modifyfile {local_filename} {remote_fileid} [file_offset]
- if len(sys.argv) < 4:
- usage()
- return None
- local_filename = sys.argv[2]
- remote_fileid = sys.argv[3]
- if len(sys.argv) > 4:
- file_offset = long(sys.argv[4])
- else:
- file_offset = 0
- try:
- ret_dict = client.modify_by_filename(local_filename, remote_fileid, file_offset)
- for key in ret_dict:
- print '[+] %s : %s' % (key, ret_dict[key])
- except (ConnectionError, ResponseError, DataError), e:
- print e
- def modifybuffer_func():
- # Modify file by buffer
- # usage: python fdfs_test.py modifybuffer {local_filename} {remote_fileid} [file_offset]
- if len(sys.argv) < 4:
- usage()
- return None
- local_filename = sys.argv[2]
- remote_fileid = sys.argv[3]
- if len(sys.argv) > 4:
- file_offset = long(sys.argv[4])
- else:
- file_offset = 0
- try:
- with open(local_filename, 'rb') as f:
- filebuffer = f.read()
- ret_dict = client.modify_by_buffer(filebuffer, remote_fileid, file_offset)
- for key in ret_dict:
- print '[+] %s : %s' % (key, ret_dict[key])
- except (ConnectionError, ResponseError, DataError), e:
- print e
-
-
- result = {
- 'upfile' : lambda : upfile_func(),
- 'upfileex' : lambda : upfileex_func(),
- 'upbuffer' : lambda : upbuffer_func(),
- 'delete' : lambda : del_func(),
- 'downfile' : lambda : downfile_func(),
- 'downbuffer' : lambda : downbuffer_func(),
- 'listgroup' : lambda : list_group_func(),
- 'listall' : lambda : listall_func(),
- 'listsrv' : lambda : list_server_func(),
- 'getmeta' : lambda : get_meta_data_func(),
- 'setmeta' : lambda : set_meta_data_func(),
- 'upslavefile' : lambda : upslavefile_func(),
- 'upappendfile' : lambda : upappendfile_func(),
- 'upappendbuffer' : lambda : upappendbuffer_func(),
- 'appendfile' : lambda : appendfile_func(),
- 'appendbuffer' : lambda : appendbuffer_func(),
- 'truncate' : lambda : truncate_func(),
- 'modifyfile' : lambda : modifyfile_func(),
- 'modifybuffer' : lambda : modifybuffer_func(),
- '-h' : lambda : usage(),
- }[sys.argv[1].lower()]()
|