from pymongo import UpdateOne from lib.all import * import oss2 from cryptography.hazmat.backends import default_backend as _default_backend service_name = 'heic2jpeg' log_dir = '/app/log' logger = Logger(service_name, log_dir=log_dir) access_key_id = "LTAI5tAdu5LRvZwm4LJa21Fo" access_key_secret = "WGvSQsDralTfFAAxhEqLBOgbXqflHo" endpoint_internal = "https://oss-cn-hangzhou-internal.aliyuncs.com" bucket_name = "wishpal-ironfan-media" class S: def __init__(self): self.bucket = oss2.Bucket(oss2.Auth(access_key_id, access_key_secret), endpoint_internal, bucket_name) self.col_image = MongoDB( host="mongodb://root:Wishpal2024@dds-bp1da1ddd62bede41.mongodb.rds.aliyuncs.com:3717,dds-bp1da1ddd62bede42.mongodb.rds.aliyuncs.com:3717/admin?replicaSet=mgset-77304659", port=3717, db="media", collection="image" ) print(self.col_image) def __del__(self): self.col_image.close() def upload_img_to_oss(self, local_path: str, oss_src_id: str): return self.bucket.put_object_from_file(oss_src_id, local_path) def heic_to_jpg_and_save(self, oss_src_id, local_path): style = "image/format,jpeg" return self.bucket.get_object_to_file(oss_src_id, local_path, process=style) def proc_oen(self): # 获取所有heic图片 q = {"fmt": "image/heic"} images = self.col_image.find(q) print(len(images)) idx = 0 del_images = list() for img in images: idx += 1 old_key = safe_get_str(img, "src_id") old_fmt = safe_get_str(img, "fmt") old_status = safe_get_int(img, "status") new_key = old_key + "_h2j" arr = old_key.split("/") local_path = arr[len(arr) - 1] + ".jpeg" del_images.append(local_path) ret_save_status = 0 try: ret_save = self.heic_to_jpg_and_save(old_key, local_path) ret_save_status = ret_save.resp.status if ret_save_status != 200: logger.Info("heic_to_jpg_and_save fail, old_key: {}, ret: {}".format(old_key, ret_save_status)) continue except Exception as e: logger.Info("panic: {}".format(str(e))) continue # 上传oss ret_upload = self.upload_img_to_oss(local_path, new_key) ret_upload_status = ret_upload.resp.status if ret_upload_status != 200: logger.Info("upload_img_to_oss fail, old_key: {}, ret: {}".format(old_key, ret_save_status)) continue # 修改db q = { "src_id": old_key } set_ = { "src_id": new_key, "old_fmt": old_fmt, "fmt": "image/jpeg" } if old_status == 101: set_["status"] = 0 logger.Info("change to heic, old_key: {}, new_key: {}".format(old_key, new_key)) up = { "$set": set_ } mongo_ret = self.col_image.update_one(q, up) logger.Info("{}, heic2jpeg finish, new_key: {}, mongo_modify: {}".format(idx, new_key, mongo_ret.modified_count)) for lp in del_images: os.remove(lp) logger.Info("{} files removed".format(len(del_images))) s = S() s.proc_oen()