95 lines
3.1 KiB
Python
95 lines
3.1 KiB
Python
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-bp1a72ede37c55d4242490.mongodb.rds.aliyuncs.com:3717/admin",
|
|
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 = 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
|
|
|
|
# 上传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()
|