import json import os import urllib import loguru import yaml from qcloud_cos import CosConfig, CosS3Client, CosClientError, CosServiceError class COSDownload: """腾讯云COS下载""" @classmethod def INPUT_TYPES(s): return { "required": { "cos_bucket": ("STRING", {"default": "bwkj-cos-1324682537"}), "cos_key": ("STRING", {"multiline": True}), } } RETURN_TYPES = ("STRING",) RETURN_NAMES = ("视频存储路径",) FUNCTION = "download" CATEGORY = "不忘科技-自定义节点🚩" def download(self, cos_bucket, cos_key): cos_key_in = cos_key.replace("/",os.sep) destination = os.path.join( os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "download", os.path.dirname(cos_key_in), os.path.basename(cos_key_in) ) loguru.logger.info(f"COS DOWNLOAD to {destination}") os.makedirs( os.path.dirname(destination), exist_ok=True, ) for i in range(0, 10): try: with open( os.path.join( os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "config.yaml" ), encoding="utf-8", mode="r+", ) as f: yaml_config = yaml.load(f, Loader=yaml.FullLoader) config = CosConfig( Region=yaml_config["region"], SecretId=yaml_config["secret_id"], SecretKey=yaml_config["secret_key"], ) client = CosS3Client(config) response = client.download_file( Bucket=cos_bucket, Key=cos_key, DestFilePath=destination ) break except CosClientError or CosServiceError as e: raise Exception(f"COS下载失败! bucket {cos_bucket}; key {cos_key}") return ( destination, ) class COSUpload: """腾讯云COS上传""" @classmethod def INPUT_TYPES(s): return { "required": { "cos_bucket": ("STRING", {"default": "bwkj-cos-1324682537"}), "path": ("STRING", {"multiline": True}), "subfolder": ("STRING", {"default": "test"}), } } RETURN_TYPES = ("STRING",) RETURN_NAMES = ("COS文件Key",) FUNCTION = "upload" CATEGORY = "不忘科技-自定义节点🚩" def upload(self, cos_bucket, path, subfolder): dest_key = "/".join( [ subfolder, ( path.split("/")[-1] if "/" in path else path.split("\\")[-1] ), ] ) loguru.logger.info(f"COS UPLOAD {path} to {cos_bucket}/{subfolder}") for i in range(0, 10): try: with open( os.path.join( os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "config.yaml" ), encoding="utf-8", mode="r+", ) as f: yaml_config = yaml.load(f, Loader=yaml.FullLoader) config = CosConfig( Region=yaml_config["region"], SecretId=yaml_config["secret_id"], SecretKey=yaml_config["secret_key"], ) client = CosS3Client(config) response = client.upload_file( Bucket=cos_bucket, Key=dest_key, LocalFilePath=path, ) break except CosClientError or CosServiceError as e: raise Exception(f"COS上传失败 bucket {cos_bucket}; local_path {path}; subfolder {subfolder}") return ( dest_key, )