Gabriel00A commited on
Commit
8cf38ca
·
verified ·
1 Parent(s): 73bbde9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +17 -24
app.py CHANGED
@@ -1,25 +1,29 @@
1
  #!/usr/bin/env python3
2
  """
3
  简单的上传与触发服务(FastAPI)
 
 
 
 
 
4
  """
5
  import os
 
6
  import subprocess
7
- import json
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
- # 在Hugging Face环境中,使用推荐的可写目录
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
- try:
56
- with open(save_path, 'wb') as f:
57
- content = await file.read()
58
- f.write(content)
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
- script_path = '/workspace/process_report.py'
66
- if 'HF_SPACE_ROOT' in os.environ:
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
- try:
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