Spaces:
Paused
Paused
Update app.py
Browse files
app.py
CHANGED
|
@@ -1,25 +1,29 @@
|
|
| 1 |
#!/usr/bin/env python3
|
| 2 |
"""
|
| 3 |
简单的上传与触发服务(FastAPI)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4 |
"""
|
| 5 |
import os
|
|
|
|
| 6 |
import subprocess
|
| 7 |
-
import
|
| 8 |
-
from fastapi import FastAPI, UploadFile, File
|
| 9 |
from fastapi.responses import HTMLResponse, JSONResponse
|
| 10 |
import uvicorn
|
| 11 |
|
| 12 |
INPUT_DIR = os.environ.get('INPUT_DIR', '/data/uploads')
|
| 13 |
-
|
| 14 |
-
if 'HF_SPACE_ROOT' in os.environ:
|
| 15 |
-
INPUT_DIR = os.path.join(os.environ['HF_SPACE_ROOT'], 'data', 'uploads')
|
| 16 |
-
|
| 17 |
os.makedirs(INPUT_DIR, exist_ok=True)
|
|
|
|
| 18 |
|
| 19 |
app = FastAPI()
|
| 20 |
|
| 21 |
@app.get('/', response_class=HTMLResponse)
|
| 22 |
async def index():
|
|
|
|
| 23 |
return HTMLResponse('''
|
| 24 |
<!DOCTYPE html>
|
| 25 |
<html>
|
|
@@ -52,28 +56,17 @@ async def index():
|
|
| 52 |
@app.post('/upload')
|
| 53 |
async def upload(file: UploadFile = File(...)):
|
| 54 |
save_path = os.path.join(INPUT_DIR, file.filename)
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
-
|
| 59 |
-
return JSONResponse({'status': 'ok', 'saved': save_path, 'message': f'文件 {file.filename} 上传成功!'})
|
| 60 |
-
except Exception as e:
|
| 61 |
-
return JSONResponse({'status': 'error', 'message': f'保存文件失败: {e}'}, status_code=500)
|
| 62 |
|
| 63 |
@app.post('/run')
|
| 64 |
async def run_once():
|
| 65 |
-
|
| 66 |
-
|
| 67 |
-
script_path = os.path.join(os.environ['HF_SPACE_ROOT'], 'process_report.py')
|
| 68 |
-
|
| 69 |
-
proc = subprocess.run(['python', script_path], capture_output=True, text=True, encoding='utf-8')
|
| 70 |
-
|
| 71 |
if proc.returncode == 0:
|
| 72 |
-
|
| 73 |
-
result_data = json.loads(proc.stdout)
|
| 74 |
-
return JSONResponse({'status': 'ok', 'returncode': proc.returncode, 'result': result_data, 'stderr': proc.stderr})
|
| 75 |
-
except json.JSONDecodeError:
|
| 76 |
-
return JSONResponse({'status': 'ok', 'returncode': proc.returncode, 'stdout': proc.stdout, 'stderr': proc.stderr})
|
| 77 |
else:
|
| 78 |
return JSONResponse({'status': 'error', 'returncode': proc.returncode, 'stdout': proc.stdout, 'stderr': proc.stderr}, status_code=500)
|
| 79 |
|
|
|
|
| 1 |
#!/usr/bin/env python3
|
| 2 |
"""
|
| 3 |
简单的上传与触发服务(FastAPI)
|
| 4 |
+
提供:
|
| 5 |
+
GET / -> 上传页面
|
| 6 |
+
POST /upload -> 上传文件(multipart)
|
| 7 |
+
POST /run -> 手动触发 process_report.py
|
| 8 |
+
部署时请确保 INPUT_DIR 与 OUTPUT_DIR 与 process_report.py 一致
|
| 9 |
"""
|
| 10 |
import os
|
| 11 |
+
import shutil
|
| 12 |
import subprocess
|
| 13 |
+
from fastapi import FastAPI, UploadFile, File, Form
|
|
|
|
| 14 |
from fastapi.responses import HTMLResponse, JSONResponse
|
| 15 |
import uvicorn
|
| 16 |
|
| 17 |
INPUT_DIR = os.environ.get('INPUT_DIR', '/data/uploads')
|
| 18 |
+
OUTPUT_DIR = os.environ.get('OUTPUT_DIR', '/data/outputs')
|
|
|
|
|
|
|
|
|
|
| 19 |
os.makedirs(INPUT_DIR, exist_ok=True)
|
| 20 |
+
os.makedirs(OUTPUT_DIR, exist_ok=True)
|
| 21 |
|
| 22 |
app = FastAPI()
|
| 23 |
|
| 24 |
@app.get('/', response_class=HTMLResponse)
|
| 25 |
async def index():
|
| 26 |
+
# 这里直接返回 HTML 内容,不需要 templates 文件夹
|
| 27 |
return HTMLResponse('''
|
| 28 |
<!DOCTYPE html>
|
| 29 |
<html>
|
|
|
|
| 56 |
@app.post('/upload')
|
| 57 |
async def upload(file: UploadFile = File(...)):
|
| 58 |
save_path = os.path.join(INPUT_DIR, file.filename)
|
| 59 |
+
with open(save_path, 'wb') as f:
|
| 60 |
+
content = await file.read()
|
| 61 |
+
f.write(content)
|
| 62 |
+
return JSONResponse({'status': 'ok', 'saved': save_path, 'message': f'文件 {file.filename} 上传成功!'})
|
|
|
|
|
|
|
|
|
|
| 63 |
|
| 64 |
@app.post('/run')
|
| 65 |
async def run_once():
|
| 66 |
+
# 调用核心处理脚本
|
| 67 |
+
proc = subprocess.run(['python', '/workspace/process_report.py'], capture_output=True, text=True)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 68 |
if proc.returncode == 0:
|
| 69 |
+
return JSONResponse({'status': 'ok', 'returncode': proc.returncode, 'stdout': proc.stdout, 'stderr': proc.stderr})
|
|
|
|
|
|
|
|
|
|
|
|
|
| 70 |
else:
|
| 71 |
return JSONResponse({'status': 'error', 'returncode': proc.returncode, 'stdout': proc.stdout, 'stderr': proc.stderr}, status_code=500)
|
| 72 |
|