mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-05-11 18:10:15 +08:00
fix: 修复刮削的文件权限只有0600的问题
This commit is contained in:
@@ -1,3 +1,4 @@
|
||||
import os
|
||||
from pathlib import Path
|
||||
from tempfile import NamedTemporaryFile
|
||||
from threading import Lock
|
||||
@@ -457,10 +458,9 @@ class MediaChain(ChainBase):
|
||||
"""
|
||||
if not _fileitem or not _content or not _path:
|
||||
return
|
||||
# 使用tempfile创建临时文件,手动删除
|
||||
tmp_file = NamedTemporaryFile(delete=False, suffix=_path.suffix)
|
||||
tmp_file_path = Path(tmp_file.name)
|
||||
try:
|
||||
# 使用tempfile创建临时文件,自动删除
|
||||
with NamedTemporaryFile(delete_on_close=False, suffix=_path.suffix) as tmp_file:
|
||||
tmp_file_path = Path(tmp_file.name)
|
||||
# 写入内容
|
||||
if isinstance(_content, bytes):
|
||||
tmp_file.write(_content)
|
||||
@@ -468,6 +468,11 @@ class MediaChain(ChainBase):
|
||||
tmp_file.write(_content.encode('utf-8'))
|
||||
tmp_file.flush()
|
||||
tmp_file.close() # 关闭文件句柄
|
||||
|
||||
current_umask = os.umask(0)
|
||||
os.umask(current_umask)
|
||||
# 刮削文件只需要读写权限
|
||||
tmp_file_path.chmod(0o666 & ~current_umask)
|
||||
|
||||
# 上传文件
|
||||
item = storagechain.upload_file(fileitem=_fileitem, path=tmp_file_path, new_name=_path.name)
|
||||
@@ -475,12 +480,6 @@ class MediaChain(ChainBase):
|
||||
logger.info(f"已保存文件:{item.path}")
|
||||
else:
|
||||
logger.warn(f"文件保存失败:{_path}")
|
||||
finally:
|
||||
# 手动删除临时文件
|
||||
try:
|
||||
tmp_file_path.unlink(missing_ok=True)
|
||||
except Exception as cleanup_err:
|
||||
logger.warning(f"清理临时文件失败:{cleanup_err}")
|
||||
|
||||
def __download_and_save_image(_fileitem: schemas.FileItem, _path: Path, _url: str):
|
||||
"""
|
||||
@@ -496,10 +495,9 @@ class MediaChain(ChainBase):
|
||||
request_utils = RequestUtils(proxies=settings.PROXY, ua=settings.NORMAL_USER_AGENT)
|
||||
with request_utils.get_stream(url=_url) as r:
|
||||
if r and r.status_code == 200:
|
||||
# 使用tempfile创建临时文件,手动删除
|
||||
tmp_file = NamedTemporaryFile(delete=False, suffix=_path.suffix)
|
||||
tmp_file_path = Path(tmp_file.name)
|
||||
try:
|
||||
# 使用tempfile创建临时文件,自动删除
|
||||
with NamedTemporaryFile(delete_on_close=False, suffix=_path.suffix) as tmp_file:
|
||||
tmp_file_path = Path(tmp_file.name)
|
||||
# 流式写入文件
|
||||
for chunk in r.iter_content(chunk_size=8192):
|
||||
if chunk:
|
||||
@@ -507,6 +505,11 @@ class MediaChain(ChainBase):
|
||||
tmp_file.flush()
|
||||
tmp_file.close() # 关闭文件句柄
|
||||
|
||||
current_umask = os.umask(0)
|
||||
os.umask(current_umask)
|
||||
# 刮削的图片只需要读写权限
|
||||
tmp_file_path.chmod(0o666 & ~current_umask)
|
||||
|
||||
# 上传文件
|
||||
item = storagechain.upload_file(fileitem=_fileitem, path=tmp_file_path,
|
||||
new_name=_path.name)
|
||||
@@ -514,12 +517,6 @@ class MediaChain(ChainBase):
|
||||
logger.info(f"已保存图片:{item.path}")
|
||||
else:
|
||||
logger.warn(f"图片保存失败:{_path}")
|
||||
finally:
|
||||
# 手动删除临时文件
|
||||
try:
|
||||
tmp_file_path.unlink(missing_ok=True)
|
||||
except Exception as cleanup_err:
|
||||
logger.warning(f"清理临时文件失败:{cleanup_err}")
|
||||
else:
|
||||
logger.info(f"{_url} 图片下载失败")
|
||||
except Exception as err:
|
||||
|
||||
Reference in New Issue
Block a user