mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-07 00:16:57 +08:00
fix 115 上传进度
This commit is contained in:
@@ -401,6 +401,14 @@ class U115Pan(StorageBase, metaclass=Singleton):
|
|||||||
"""
|
"""
|
||||||
实现带秒传、断点续传和二次认证的文件上传
|
实现带秒传、断点续传和二次认证的文件上传
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
def progress_callback(consumed_bytes: int, total_bytes: int):
|
||||||
|
"""
|
||||||
|
上传进度回调
|
||||||
|
"""
|
||||||
|
progress = consumed_bytes / total_bytes * 100
|
||||||
|
logger.info(f"【115】已上传: {consumed_bytes}/{total_bytes} 字节, 进度: {progress:.2f}%")
|
||||||
|
|
||||||
# 计算文件特征值
|
# 计算文件特征值
|
||||||
target_name = new_name or local_path.name
|
target_name = new_name or local_path.name
|
||||||
file_size = local_path.stat().st_size
|
file_size = local_path.stat().st_size
|
||||||
@@ -493,44 +501,43 @@ class U115Pan(StorageBase, metaclass=Singleton):
|
|||||||
security_token=token_resp['SecurityToken']
|
security_token=token_resp['SecurityToken']
|
||||||
)
|
)
|
||||||
bucket = oss2.Bucket(auth, endpoint, init_result['bucket']) # noqa
|
bucket = oss2.Bucket(auth, endpoint, init_result['bucket']) # noqa
|
||||||
# 分片上传
|
|
||||||
headers = {
|
headers = {
|
||||||
'x-oss-callback': init_result['callback']['callback'],
|
'x-oss-callback': init_result['callback']['callback'],
|
||||||
'x-oss-callback-var': base64.b64encode(
|
'x-oss-callback-var': base64.b64encode(
|
||||||
init_result['callback']['callback_var'].encode('utf-8')
|
init_result['callback']['callback_var'].encode('utf-8')
|
||||||
).decode('utf-8')
|
).decode('utf-8')
|
||||||
}
|
}
|
||||||
upload_id = bucket.init_multipart_upload(target_name, headers=headers).upload_id
|
logger.info(f"【115】开始上传: {local_path} -> {target_name}")
|
||||||
# 每10M分一片
|
with open(local_path, "rb") as f:
|
||||||
parts = []
|
try:
|
||||||
chunk_size = 10 * 1024 * 1024
|
result = bucket.put_object(
|
||||||
chunk_num = (file_size + chunk_size - 1) // chunk_size
|
target_name,
|
||||||
with open(local_path, 'rb') as f:
|
data=f,
|
||||||
for i in range(chunk_num):
|
headers=headers,
|
||||||
part = bucket.upload_part(target_name, upload_id, i + 1, f.read(chunk_size))
|
progress_callback=progress_callback
|
||||||
parts.append(oss2.models.PartInfo(i + 1, part.etag))
|
)
|
||||||
try:
|
if result.status == 200:
|
||||||
bucket_result = bucket.complete_multipart_upload(target_name, upload_id, parts)
|
# 构造返回结果
|
||||||
logger.debug(f"【115】上传 Step 5 结果: {bucket_result}")
|
logger.info(f"【115】{target_name} 上传成功")
|
||||||
except Exception as err:
|
return schemas.FileItem(
|
||||||
if "FileAlreadyExists" not in str(err):
|
storage=self.schema.value,
|
||||||
logger.error(f"【115】上传文件失败: {str(err)}")
|
fileid=init_result.get("file_id"),
|
||||||
|
type="file",
|
||||||
|
path=str(Path(target_dir.path) / target_name),
|
||||||
|
name=target_name,
|
||||||
|
basename=Path(target_name).stem,
|
||||||
|
extension=Path(target_name).suffix[1:],
|
||||||
|
size=file_size,
|
||||||
|
pickcode=init_result["pick_code"],
|
||||||
|
modify_time=int(time.time())
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
logger.warn(f"【115】{target_name} 上传失败,错误码: {result.status}")
|
||||||
|
return None
|
||||||
|
except oss2.exceptions.OssError as e:
|
||||||
|
logger.error(f"【115】{target_name} 上传失败: {e.status}, 错误码: {e.code}, 详情: {e.message}")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# 构造返回结果
|
|
||||||
return schemas.FileItem(
|
|
||||||
storage=self.schema.value,
|
|
||||||
fileid=init_result.get("file_id"),
|
|
||||||
type="file",
|
|
||||||
path=str(Path(target_dir.path) / target_name),
|
|
||||||
name=target_name,
|
|
||||||
basename=Path(target_name).stem,
|
|
||||||
extension=Path(target_name).suffix[1:],
|
|
||||||
size=file_size,
|
|
||||||
pickcode=init_result["pick_code"],
|
|
||||||
modify_time=int(time.time())
|
|
||||||
)
|
|
||||||
|
|
||||||
def download(self, fileitem: schemas.FileItem, path: Path = None) -> Optional[Path]:
|
def download(self, fileitem: schemas.FileItem, path: Path = None) -> Optional[Path]:
|
||||||
"""
|
"""
|
||||||
带限速处理的下载
|
带限速处理的下载
|
||||||
|
|||||||
Reference in New Issue
Block a user