Beispiel #1
0
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
Beispiel #2
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")
Beispiel #3
0
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
Beispiel #4
0
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")