feat: fix CSV upload state and UI indicators to prevent duplicate processing

This commit is contained in:
ws50529
2026-05-20 17:35:10 +08:00
parent 345b4a789a
commit 2f392b13c6
6 changed files with 124 additions and 39 deletions
+20
View File
@@ -3,6 +3,7 @@ import os
import uuid
import re
import tempfile
import time
import numpy as np
import pandas as pd
@@ -16,8 +17,26 @@ TEMP_CSV_DIR = os.environ.get(
"DEA_TEMP_CSV_DIR",
os.path.join(tempfile.gettempdir(), "diff-eq-analyzer-csv"),
)
TEMP_CSV_TTL_SECONDS = int(os.environ.get("DEA_TEMP_CSV_TTL_SECONDS", str(24 * 60 * 60)))
os.makedirs(TEMP_CSV_DIR, exist_ok=True)
def prune_expired_csv_uploads(now=None):
if TEMP_CSV_TTL_SECONDS <= 0:
return
os.makedirs(TEMP_CSV_DIR, exist_ok=True)
cutoff = (now or time.time()) - TEMP_CSV_TTL_SECONDS
for filename in os.listdir(TEMP_CSV_DIR):
if not filename.endswith(".csv"):
continue
path = os.path.join(TEMP_CSV_DIR, filename)
try:
if os.path.isfile(path) and os.path.getmtime(path) < cutoff:
os.remove(path)
except OSError:
pass
def get_cached_file_path(file_id):
if not re.match(r'^[0-9a-f\-]{36}$', file_id):
raise HTTPException(status_code=400, detail="無效的檔案ID")
@@ -36,6 +55,7 @@ def downsample_for_plot(index, original, filtered_float, filtered_fixed):
async def save_csv_upload(file):
prune_expired_csv_uploads()
filename = (file.filename or "").lower()
if filename and not filename.endswith(".csv"):
raise HTTPException(status_code=400, detail="請上傳 CSV 檔案")