feat(公开内容): 添加临时文件上传功能,支持1小时/1天/7天过期
This commit is contained in:
@@ -566,3 +566,58 @@ def celery_send_pdf_report_email(self):
|
||||
'retries': self.request.retries if hasattr(self, 'request') else 0,
|
||||
'timestamp': timezone.now().isoformat()
|
||||
}
|
||||
|
||||
|
||||
@shared_task(bind=True)
|
||||
def cleanup_expired_temp_files(self):
|
||||
"""
|
||||
清理过期的临时文件
|
||||
每小时执行一次,删除已过期的临时文件及其物理文件
|
||||
"""
|
||||
task_id = self.request.id if hasattr(self, 'request') else 'unknown'
|
||||
logger.info(f"[任务 {task_id}] 开始执行清理过期临时文件任务")
|
||||
|
||||
try:
|
||||
from core.models import PublicContent
|
||||
|
||||
expired_files = PublicContent.objects.filter(
|
||||
is_temp_file=True,
|
||||
expire_at__lte=timezone.now()
|
||||
)
|
||||
|
||||
deleted_count = 0
|
||||
for temp_file in expired_files:
|
||||
try:
|
||||
if temp_file.file:
|
||||
file_path = temp_file.file.path
|
||||
if os.path.exists(file_path):
|
||||
os.remove(file_path)
|
||||
logger.info(f"[任务 {task_id}] 已删除物理文件: {file_path}")
|
||||
|
||||
file_title = temp_file.title
|
||||
temp_file.delete()
|
||||
deleted_count += 1
|
||||
logger.info(f"[任务 {task_id}] 已删除临时文件记录: {file_title}")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"[任务 {task_id}] 删除临时文件失败: {str(e)}")
|
||||
|
||||
logger.success(f"[任务 {task_id}] 清理完成,共删除 {deleted_count} 个过期临时文件")
|
||||
return {
|
||||
'status': 'success',
|
||||
'task_id': task_id,
|
||||
'deleted_count': deleted_count,
|
||||
'timestamp': timezone.now().isoformat()
|
||||
}
|
||||
|
||||
except Exception as e:
|
||||
error_msg = str(e)
|
||||
error_traceback = traceback.format_exc()
|
||||
logger.error(f"[任务 {task_id}] 清理过期临时文件失败: {error_msg}")
|
||||
logger.error(f"[任务 {task_id}] 错误详情:\n{error_traceback}")
|
||||
return {
|
||||
'status': 'failed',
|
||||
'task_id': task_id,
|
||||
'error': error_msg,
|
||||
'timestamp': timezone.now().isoformat()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user