Package: fdfs_client-py
# Fdfs_client pyThe Python interface to the Fastdfs Ver 4.06.## Installation$ sudo python setup.py install## Getting Started1. import fdfs_client.client module2. instantiate class Fdfs_client3. call memeber functions>>> from fdfs_client.client import *>>> 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'}## API ReferenceClass Fdfs_client:member functions:* upload_by_filename(self, filename, meta_dict = None)'''Upload a file to Storage server.arguments:@filename: string, name of file that will be uploaded@meta_dict: dictionary e.g.:{'ext_name'  : 'jpg','file_size' : '10240B','width'     : '160px','hight'     : '80px'} meta_dict can be null@return dict {'Group name'      : group_name,'Remote file_id'  : remote_file_id,'Status'          : 'Upload successed.','Local file name' : local_file_name,'Uploaded size'   : upload_size,'Storage IP'      : storage_ip} if success else None* upload_by_buffer(self, filebuffer, file_ext_name = None, meta_dict = None)'''Upload a buffer to Storage server.arguments:@filebuffer: string, buffer@file_ext_name: string, file extend name@meta_dict: dictionary e.g.:{'ext_name'  : 'jpg','file_size' : '10240B','width'     : '160px','hight'     : '80px'}@return dict {'Group name'      : group_name,'Remote file_id'  : remote_file_id,'Status'          : 'Upload successed.','Local file name' : '','Uploaded size'   : upload_size,'Storage IP'      : storage_ip}'''* upload_slave_by_filename(self, filename, remote_file_id, prefix_name, \meta_dict = None)'''Upload slave file to Storage server.arguments:@filename: string, local file name@remote_file_id: string, remote file id@prefix_name: string@meta_dict: dictionary e.g.:{'ext_name'  : 'jpg','file_size' : '10240B','width'     : '160px','hight'     : '80px'}@return dictionary {'Status'        : 'Upload slave successed.','Local file name' : local_filename,'Uploaded size'   : upload_size,'Remote file id'  : remote_file_id,'Storage IP'      : storage_ip}'''* upload_slave_by_buffer(self, filebuffer, remote_file_id, \meta_dict = None, file_ext_name = None)'''Upload slave file by bufferarguments:@filebuffer: string@remote_file_id: string@meta_dict: dictionary e.g.:{'ext_name'  : 'jpg','file_size' : '10240B','width'     : '160px','hight'     : '80px'}@return dictionary {'Status'        : 'Upload slave successed.','Local file name' : local_filename,'Uploaded size'   : upload_size,'Remote file id'  : remote_file_id,'Storage IP'      : storage_ip}'''* upload_appender_by_filename(self, local_filename, meta_dict = None)'''Upload an appender file by filename.arguments:@local_filename: string@meta_dict: dictionary e.g.:{'ext_name'  : 'jpg','file_size' : '10240B','width'     : '160px','hight'     : '80px'}    Notice: it can be null@return dict {'Group name'      : group_name,'Remote file_id'  : remote_file_id,'Status'          : 'Upload successed.','Local file name' : '','Uploaded size'   : upload_size,'Storage IP'      : storage_ip}'''* upload_appender_by_buffer(self, filebuffer, file_ext_name = None, meta_dict = None)'''Upload a buffer to Storage server.arguments:@filebuffer: string@file_ext_name: string, can be null@meta_dict: dictionary, can be null@return dict {'Group name'      : group_name,'Remote file_id'  : remote_file_id,'Status'          : 'Upload successed.','Local file name' : '','Uploaded size'   : upload_size,'Storage IP'      : storage_ip}'''* delete_file(self, remote_file_id)'''Delete a file from Storage server.arguments:@remote_file_id: string, file_id of file that is on storage server@return tuple ('Delete file successed.', remote_file_id, storage_ip)'''* download_to_file(self, local_filename, remote_file_id, offset = 0, down_bytes = 0)'''Download a file from Storage server.arguments:@local_filename: string, local name of file@remote_file_id: string, file_id of file that is on storage server@offset: long@down_bytes: long@return dict {'Remote file_id'  : remote_file_id,'Content'         : local_filename,'Download size'   : downloaded_size,'Storage IP'      : storage_ip}'''* download_to_buffer(self, remote_file_id, offset = 0, down_bytes = 0)'''Download a file from Storage server and store in buffer.arguments:@remote_file_id: string, file_id of file that is on storage server@offset: long@down_bytes: long@return dict {'Remote file_id'  : remote_file_id,'Content'         : file_buffer,'Download size'   : downloaded_size,'Storage IP'      : storage_ip}'''* list_one_group(self, group_name)'''List one group information.arguments:@group_name: string, group name will be list@return Group_info,  instance'''* list_all_groups(self)'''List all group information.@return dictionary {'Groups count' : group_count,'Groups'       : list of groups}'''* list_servers(self, group_name, storage_ip = None)'''List all storage servers information in a grouparguments:@group_name: string@return dictionary {'Group name' : group_name,'Servers'    : server list,}'''* get_meta_data(self, remote_file_id)'''Get meta data of remote file.arguments:@remote_fileid: string, remote file id@return dictionary, meta data'''* set_meta_data(self, remote_file_id, \meta_dict, op_flag = STORAGE_SET_METADATA_FLAG_OVERWRITE)'''Set meta data of remote file.arguments:@remote_file_id: string@meta_dict: dictionary@op_flag: char, 'O' for overwrite, 'M' for merge@return dictionary {'Status'     : status,'Storage IP' : storage_ip}'''* append_by_filename(self, local_filename, remote_fileid)'''Append a file of Storage serverarguments:@local_filename: string@remote_fileid: string@return dict {'Group name'      : group_name,'Remote file_id'  : remote_file_id,'Status'          : 'Upload successed.','Local file name' : '','Uploaded size'   : upload_size,'Storage IP'      : storage_ip}'''* append_by_buffer(self, file_buffer, remote_fileid)'''Append a file of Storage serverarguments:@file_buffer: string@remote_fileid: string@return dict {'Group name'      : group_name,'Remote file_id'  : remote_file_id,'Status'          : 'Upload successed.','Local file name' : '','Uploaded size'   : upload_size,'Storage IP'      : storage_ip}'''* truncate_file(self, truncated_filesize, appender_fileid)'''Truncate file in Storage server.arguments:@truncated_filesize: long@appender_fileid: remote_fileid@return: dictionary {'Status'     : 'Truncate successed.','Storage IP' : storage_ip}'''* modify_by_filename(self, filename, appender_fileid, offset = 0)'''Modify a file in Storage server by filename.arguments:@filename: string, local file name@offset: long, file offset@appender_fileid: string, remote file id@return: dictionary {'Status'     : 'Modify successed.','Storage IP' : storage_ip}'''* modify_by_buffer(self, filebuffer, appender_fileid, offset = 0)'''Modify a file in Storage server by buffer.arguments:@filebuffer: string, file buffer@offset: long, file offset@appender_fileid: string, remote file id@return: dictionary {'Status'     : 'Modify successed.','Storage IP' : storage_ip}'''### Connection PoolsBehind the scenes, fdfs_client-py uses a connection pool to manage connections tosets of tracker server and storage server.## Versioning schemefdfs_client-py ver 1.2.7b support client protol of Fastdfs ver 4.06.Python must be ver 2.6 later.Author------fdfs_client-py is developed and maintained by scott yuan (scottzer8@gmail.com)fdfs_client-py is bug fixed and maintained by hay86It can be found here: http://github.com/hay86/fdfs_client-pySpecial thanks to:* Andy Mccurdy, author of redis-py, referenced his code.* g.rodola, author sendfile module for python, g.rodola@gmail.com