diff --git a/elastic/views.py b/elastic/views.py index 6f2429d..4654ef6 100644 --- a/elastic/views.py +++ b/elastic/views.py @@ -845,7 +845,26 @@ def upload(request): merged_group_data["错误信息"] = ";".join(group_errors[:3]) rel_paths = [f"images/{img[1]}" for img in group_images] - image_urls = [request.build_absolute_uri(settings.MEDIA_URL + rp) for rp in rel_paths] + + # 改进:如果配置了 MinIO,则在上传阶段就同步到 MinIO,确保在线版本待处理列表能显示图片 + image_urls = [] + from minio_storage.minio_connect import is_minio_configured, upload_file, presigned_get_url + + minio_enabled = is_minio_configured() + for rp in rel_paths: + abs_p = os.path.join(settings.MEDIA_ROOT, rp) + if minio_enabled: + try: + # 上传到 MinIO + upload_file(abs_p, rp) + # 生成预签名 URL + url = presigned_get_url(rp) + image_urls.append(url) + except Exception as e: + print(f"上传临时图片到 MinIO 失败: {e}") + image_urls.append(request.build_absolute_uri(settings.MEDIA_URL + rp)) + else: + image_urls.append(request.build_absolute_uri(settings.MEDIA_URL + rp)) file_results.append({ "name": f.name, @@ -1883,7 +1902,8 @@ def export_achievements_csv(request): # 6. 否则回退到 CSV output = io.StringIO() output.write('\ufeff') # UTF-8 BOM - writer = csv.DictWriter(output, fieldnames=headers) + # 增加 extrasaction='ignore' 以忽略 _image_refs 等内部辅助字段 + writer = csv.DictWriter(output, fieldnames=headers, extrasaction='ignore') writer.writeheader() for row in parsed_data_list: writer.writerow(row)