def download(file_bucket, filename_in_cos, file_local_path, cos_client): """download file from cos bucket Args: file_bucket (str): bucket name. filename_in_cos (str): file name in the bucket, which should be started with "/". file_local_path (str): local path in the unix path format, for example "/tmp/xxx.jpg". cos_client (object): cos client created by Tencent COS SDK Returns: int: 0 if successful, 1 is failed. Raises: Error: Make sure the object exists and your bucket is in the same region as this function. """ print("Try get from [%s] to download file [%s]" % (file_bucket, filename_in_cos)) try: request = DownloadFileRequest(file_bucket, filename_in_cos, file_local_path) download_file_ret = cos_client.download_file(request) except Exception as e: print(e) print( 'Error getting object {} from bucket {}. Make sure the object exists and your bucket is in the same region as this function.' .format(filename_in_cos, file_bucket)) raise e if download_file_ret['code'] != 0: logger.info("Fail Download file [%s]" % filename_in_cos) return -1 else: logger.info("SUC Download file [%s]" % filename_in_cos) return 0
def download(self, task, local_path): # self._oss_api.get_object_to_file(urllib.unquote(cos_path).encode('utf-8'), local_path) for i in range(20): logger.info("download file with rety {0}".format(i)) import os try: os.remove(task.key) except: pass req = DownloadFileRequest(self._bucket, task.key, local_path) ret = self._cos_api.download_file(req) # self._oss_api.get_object_to_file(task.key, local_path) logger.debug(str(ret)) if task.size is None: logger.info( "task's size is None, skip check file size on local") break from os import path if path.getsize(local_path) != int(task.size): logger.error( "Download Failed, size1: {size1}, size2: {size2}".format( size1=path.getsize(local_path), size2=task.size)) else: logger.info("Download Successfully, break") break else: raise IOError("Download Failed with 20 retry")
def download_file(cos_client, bucket, key, local_file_path): request = DownloadFileRequest(bucket, key, local_file_path) download_file_ret = cos_client.download_file(request) if download_file_ret['code'] == 0: logger.info("Download file [%s] Success" % key) return 0 else: logger.error("Download file [%s] Failed, err: %s" % (key, download_file_ret['message'])) return -1
def main_handler(event, context): logger.info("start main handler") for record in event['Records']: try: bucket = record['cos']['cosBucket']['name'] key = record['cos']['cosObject']['key'] key = key.replace('/' + str(appid) + '/' + bucket, '') download_path = '/tmp/{}{}'.format(uuid.uuid4(), key.split('/')[-1]) upload_name = '{}{}'.format( file_name_p.findall(key.split('/')[-1])[0], 'png') upload_path = '/tmp/rounded-{}'.format(upload_name) print("Key is " + key) # file name in bucket print("Get from [%s] to download file [%s]" % (bucket, key)) # download image from cos request = DownloadFileRequest(bucket, key, download_path) download_file_ret = cos_client.download_file(request) if download_file_ret['code'] == 0: # TODO change rad as Incoming parameter rad = 100 logger.info("Download file [%s] Success" % key) logger.info("Image compress function start") starttime = datetime.datetime.now() #compress image here round_image(download_path, upload_path, rad) endtime = datetime.datetime.now() logger.info("compress image take " + str((endtime - starttime).microseconds / 1000) + "ms") #upload the compressed image to resized bucket u_key = '{}{}'.format(file_name_p.findall(key)[0], 'png') request = UploadFileRequest(u'%sresized' % bucket, u_key.decode('utf-8'), upload_path.decode('utf-8')) upload_file_ret = cos_client.upload_file(request) logger.info("upload image, return message: " + str(upload_file_ret)) #delete local file delete_local_file(str(download_path)) delete_local_file(str(upload_path)) else: logger.error("Download file [%s] Failed, err: %s" % (key, download_file_ret['message'])) return -1 except Exception as e: print(e) print( 'Error getting object {} from bucket {}. Make sure the object exists and your bucket is in the same region as this function.' .format(key, bucket)) raise e
def _download(self, task, local_path, is_ignore_size): for i in range(20): logger.info("download file with rety {0}".format(i)) import os try: os.remove(task.key) except: pass req = DownloadFileRequest(self._bucket, task.key, local_path) ret = self._cos_api.download_file(req) logger.debug(str(ret)) if ret['code'] != 0: logger.error("error code: " + str(ret['code'])) raise IOError("Download Failed, ret=" + str(ret)) if is_ignore_size: logger.info("Download Successfully, break") break if task.size is None: logger.info("task's size is None, skip check file size on local") break from os import path task_size = 0 if isinstance(task.size, int): task_size = task.size else: task_size = int(task.size['filelen']) if path.getsize(local_path) != task_size: logger.error("Download Failed, size1: {size1}, size2: {size2}".format(size1=path.getsize(local_path), size2=task_size)) else: logger.info("Download Successfully, break") break else: raise IOError("Download Failed with 20 retry")