class Samba: def __init__(self, _name): self.config = ConfigParser.ConfigParser() self.config.read('lora.conf') self.name = _name self.init_parameter() self.init_conn() def init_parameter(self): self.conn = None self.username = self.config.get(self.name, 'username') self.password = self.config.get(self.name, 'password') self.machine_name = self.config.get(self.name, 'machine_name') self.server_name = self.config.get(self.name, 'server_name') self.server_ip = self.config.get(self.name, 'server_ip') self.domain_name = self.config.get(self.name, 'domain_name') self.remote_folder= self.config.get(self.name, 'remote_folder') def init_conn(self): self.conn = SMBConnection(self.username, self.password, self.machine_name, self.server_name, domain=self.domain_name, use_ntlm_v2=True, is_direct_tcp=True) self.conn.connect(self.server_ip, 445) shares = self.conn.listShares() def send_data(self, _name): with open(_name, 'rb') as file: self.conn.storeFile(self.remote_folder, _name, file) def close(self): self.conn.close()
class SMBClient(object): """ smb连接客户端 """ username = '' password = '' ip = '' port = None status = False samba = None def __init__(self, username, password, ip, port=139): self.username = username self.password = password self.ip = ip self.port = port def connect(self): try: self.samba = SMBConnection(self.username, self.password, '', '', use_ntlm_v2=True) self.samba.connect(self.ip, self.port) self.status = self.samba.auth_result except: self.samba.close() def disconnect(self): if self.status: self.samba.close() def all_file_names_in_dir(self, service_name, dir_name): """ 列出文件夹内所有文件名 :param service_name: :param dir_name: :return: """ f_names = list() for e in self.samba.listPath(service_name, dir_name): # if len(e.filename) > 3: (会返回一些.的文件,需要过滤) if e.filename[0] != '.': f_names.append(e.filename) return f_names def download(self, service_name, smb_file_path, local_file_path): """ 下载文件 :param service_name:服务名(smb中的文件夹名) :param smb_file_path: smb文件 :param local_file_path: 本地文件 :return: """ f = open(local_file_path, 'wb') self.samba.retrieveFile(service_name, smb_file_path, f) f.close() # def download(self, f_names, service_name, smb_dir, local_dir): # """ # 下载文件 # :param f_names:文件名 # :param service_name:服务名(smb中的文件夹名) # :param smb_dir: smb文件夹 # :param local_dir: 本地文件夹 # :return: # """ # assert isinstance(f_names, list) # for f_name in f_names: # f = open(os.path.join(local_dir, f_name), 'w') # self.samba.retrieveFile(service_name, os.path.join(smb_dir, f_name), f) # f.close() def upload(self, service_name, smb_dir, file_name): """ 上传文件 :param service_name:服务名(smb中的文件夹名) :param smb_dir: smb文件夹 :param file_name: 本地文件夹 :return: """ self.samba.storeFile(service_name, smb_dir, file_name) def create_dir(self, service_name, path): """ 创建文件夹 :param service_name: :param path: :return: """ try: self.samba.createDirectory(service_name, path) except OperationFailure: pass def file_size(self, service_name, path): """ 文件大小 :param service_name: :param path: :return: """ return self.samba.getAttributes(service_name, path).file_size def is_directory(self, service_name, path): """ 判断是否为文件夹 :param service_name: :param path: :return: """ return self.samba.getAttributes(service_name, path).isDirectory def retrieve_file(self, service_name, path, local_file): """ 下载文件 :param service_name: :param path: :param local_file: :return: """ file_attr, file_size = self.samba.retrieveFile(service_name, path, local_file) return file_attr, file_size def retrieve_file_from_offset(self, service_name, path, offset, max_length, local_file): """ 断点续传下载文件 :param service_name: :param path: :param offset: :param max_length: :param local_file: :return: """ file_attr, file_size = self.samba.retrieveFileFromOffset( service_name, path, local_file, offset, max_length) return file_attr, file_size def del_dir(self, service_name, dir_path): """ 删除smb文件夹 :param service_name: :param dir_path: :return: """ self.samba.deleteDirectory(service_name, dir_path) def del_file(self, service_name, file_path): """ 删除文件 :param service_name: :param file_path: :return: """ self.samba.deleteFiles(service_name, file_path)
def main(): # get local pdf file name first try: password = getpass.getpass('Password: '******'Error: can not access the system') conn.close() # download current homepage_file try: with open(homepage_file, 'wb') as fp: conn.retrieveFile('c$', docroot + homepage_file, fp) print('Downloading of ' + homepage_file + ' successful\n') except: print('Error: Cannot download ' + homepage_file + '\n') conn.close() recent_list = recentFiles(conn, doc_root + '/archivefolder') print( str(access_recent) + ' most recent filenames in the archivefolder directory: \n') for n in range(len(recent_list)): print(recent_list[n]) arch_filename = input('\nSave current ' + homepage_file + ' for archivefolder as? ') # TODO suggest filename try: # upload downloaded homepage_file into archivefolder as arch_filename with open(homepage_file, 'rb') as fp: conn.storeFile('c$', doc_root + '/archivefolder' + arch_filename, fp) os.remove(homepage_file) except: print('Error: Cannot upload ' + homepage_file + ' into archivefolder') conn.close() try: # Delete homepage_file_old, then rename homepage_file in as homepage_file_old conn.deleteFiles('c$', docroot + homepage_file_old) conn.deleteFiles('c$', docroot + newsletter_file) conn.rename('c$', docroot + homepage_file, docroot + homepage_file_old) except: print('Error: Cannot rename ' + homepage_file + ' to ' + homepage_file_old + ' in folder.') conn.close() try: # TODO make this elegant localpdf = getLocalpdf() with open(localpdf, 'rb') as fp: conn.storeFile('c$', docroot + homepage_file, fp) with open(localpdf, 'rb') as fp: conn.storeFile('c$', docroot + newsletter_file, fp) except: print('Error: cannot upload ' + localpdf + ' to folder') conn.close() print('\n' + homepage_file + ' succesffully updated!\n\n Closing SMB connection') os.system('pause') conn.close()
def connect_remote_win_path(hostname, username, password, filepath, cache_path): localserver = "local" domain = "" service_name = '' try: if cache_path[:2] == r"\\": ll = cache_path.split('\\') service_name = ll[3] print("service_name") new_cache_path = "" for i in range(len(ll)): if i > 3: new_cache_path += "/" + ll[i] print("new_cache_path:", new_cache_path) else: service_name = cache_path[:1] + "$" ll = cache_path.split('\\') new_cache_path = "" for i in range(len(ll)): if i > 0: new_cache_path += "/" + ll[i] print("new_cache_path:", new_cache_path) print("connecting server") conn = SMBConnection(username, password, localserver, hostname, domain=domain, use_ntlm_v2=True, sign_options=SMBConnection.SIGN_WHEN_SUPPORTED, is_direct_tcp=True) conn.connect(hostname, 445) response = conn.listShares(timeout=30) # obtain a list of shares print('Shares on: ' + hostname) arcpy.AddMessage('Shares on: ' + hostname) for i in range(len(response)): # iterate through the list of shares print(" Share[", i, "] =", response[i].name) print("filepath:", filepath) try: file_list = os.listdir(filepath) for Level in file_list: lodPath = os.path.join(filepath, Level) bundles = os.listdir(lodPath) server_lod_path = new_cache_path + "/" + Level for bundle in bundles: local_bundle_path = lodPath + os.sep + bundle server_bundle_path = server_lod_path + "/" + bundle print("local:", local_bundle_path) # print("server:", server_bundle_path) file_obj = open(local_bundle_path, 'rb') # service_name = response[2].name print("service_name:", service_name) conn.storeFile(service_name, server_bundle_path, file_obj, timeout=60) print("uploaded:", server_bundle_path) arcpy.AddMessage("uploaded:" + server_bundle_path) file_obj.close() # print("upload over") conn.close() return True except: arcpy.AddError( "upload failed! Maybe there is no any tiles in the dir: " + filepath) conn.close() return False except: conn.close() return False
def connect_remote_win_path(hostname,username,password,filepath,cache_path): localserver = "local" domain = "" service_name = '' try: if cache_path[:2] == r"\\": ll = cache_path.split('\\') service_name = ll[3] print("service_name") new_cache_path = "" for i in range(len(ll)): if i > 3: new_cache_path += "/"+ ll[i] print("new_cache_path:",new_cache_path) else: service_name = cache_path[:1] + "$" ll = cache_path.split('\\') new_cache_path = "" for i in range(len(ll)): if i > 0: new_cache_path += "/" + ll[i] print("new_cache_path:", new_cache_path) print("connecting server") conn = SMBConnection(username,password,localserver,hostname,domain=domain, use_ntlm_v2=True,sign_options=SMBConnection.SIGN_WHEN_SUPPORTED,is_direct_tcp=True) conn.connect(hostname, 445) response = conn.listShares(timeout=30) # obtain a list of shares print('Shares on: ' + hostname) for i in range(len(response)): # iterate through the list of shares print(" Share[", i, "] =", response[i].name) print("filepath:", filepath) try: file_list = os.listdir(filepath) for Level in file_list: lodPath = os.path.join(filepath, Level) bundles = os.listdir(lodPath) server_lod_path = new_cache_path + "/" + Level for bundle in bundles: local_bundle_path = lodPath + os.sep + bundle server_bundle_path = server_lod_path + "/" + bundle print("local:",local_bundle_path) # print("server:", server_bundle_path) file_obj = open(local_bundle_path,'rb') # service_name = response[2].name print("service_name:",service_name) conn.storeFile(service_name, server_bundle_path, file_obj, timeout=60) print("uploaded:", server_bundle_path) file_obj.close() # print("upload over") conn.close() return True except: print("upload failed! Maybe there is no any tiles in the dir: "+filepath) conn.close() return False except: conn.close() return False
class SMBClient(object): ''' smb连接客户端 ''' user_name = '' passwd = '' ip = '' prot = None status = False samba = None def __init__(self, user_name, passwd, ip, port=139): self.user_name = user_name self.passwd = passwd self.ip = ip self.port = port def connect(self): try: self.samba = SMBConnection(self.user_name, self.passwd, '', '', use_ntlm_v2=True) self.samba.connect(self.ip, self.port) self.status = self.samba.auth_result except: self.samba.close() def disconnect(self): if self.status: self.samba.close() def all_file_names_in_dir(self, service_name, dir_name): ''' 列出文件夹内所有文件名 :param service_name: :param dir_name: :return: ''' f_names = list() for e in self.samba.listPath(service_name, dir_name): # if len(e.filename) > 3: (会返回一些.的文件,需要过滤) if e.filename[0] != '.': f_names.append(e.filename) return f_names def download(self, f_names, service_name, smb_dir, local_dir): ''' 下载文件 :param f_names:文件名 :param service_name:服务名(smb中的文件夹名) :param smb_dir: smb文件夹 :param local_dir: 本地文件夹 :return: ''' assert isinstance(f_names, list) for f_name in f_names: f = open(os.path.join(local_dir, f_name), 'w') self.samba.retrieveFile(service_name, os.path.join(smb_dir, f_name), f) f.close() def upload(self, service_name, smb_dir, file_name): ''' 上传文件 :param f_names:文件名 :param service_name:服务名(smb中的文件夹名) :param smb_dir: smb文件夹 :param local_dir: 本地文件夹 :return: ''' self.samba.storeFile(service_name, smb_dir, file_name) def createDir(self, service_name, path): """ 创建文件夹 :param service_name: :param path: :return: """ try: self.samba.createDirectory(service_name, path) except OperationFailure: pass