Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -1,7 +1,8 @@
|
|
| 1 |
import os
|
|
|
|
| 2 |
from fastapi import FastAPI, HTTPException, Request
|
| 3 |
from fastapi.middleware.cors import CORSMiddleware
|
| 4 |
-
from fastapi.responses import FileResponse,
|
| 5 |
from pydantic import BaseModel
|
| 6 |
|
| 7 |
app = FastAPI()
|
|
@@ -33,7 +34,7 @@ class DeleteRequest(BaseModel):
|
|
| 33 |
def health():
|
| 34 |
return {"ok": True, "service": "huggingface-local-bucket"}
|
| 35 |
|
| 36 |
-
# 📂 1. LISTAR ARQUIVOS DA PASTA
|
| 37 |
@app.get("/files")
|
| 38 |
def list_files():
|
| 39 |
try:
|
|
@@ -62,14 +63,14 @@ def list_files():
|
|
| 62 |
@app.post("/upload-url")
|
| 63 |
def upload_url(payload: UploadURLRequest, request: Request):
|
| 64 |
try:
|
| 65 |
-
filename_encoded = urllib.parse.quote(payload.fileName)
|
| 66 |
# Retorna o link de upload apontando diretamente para o nosso endpoint PUT abaixo
|
| 67 |
base_url = str(request.base_url)
|
| 68 |
# Garante que use HTTPS em produção
|
| 69 |
if "hf.space" in base_url and base_url.startswith("http://"):
|
| 70 |
base_url = base_url.replace("http://", "https://", 1)
|
| 71 |
|
| 72 |
-
upload_endpoint = f"{base_url}upload-file/{
|
| 73 |
return {"ok": True, "url": upload_endpoint}
|
| 74 |
except Exception as e:
|
| 75 |
return {"ok": False, "error": str(e)}
|
|
@@ -78,7 +79,9 @@ def upload_url(payload: UploadURLRequest, request: Request):
|
|
| 78 |
@app.put("/upload-file/{filename}")
|
| 79 |
async def receive_upload(filename: str, request: Request):
|
| 80 |
try:
|
| 81 |
-
|
|
|
|
|
|
|
| 82 |
|
| 83 |
# Proteção simples de segurança de diretório
|
| 84 |
if not os.path.abspath(filepath).startswith(os.path.abspath(STORAGE_DIR)):
|
|
|
|
| 1 |
import os
|
| 2 |
+
import urllib.parse
|
| 3 |
from fastapi import FastAPI, HTTPException, Request
|
| 4 |
from fastapi.middleware.cors import CORSMiddleware
|
| 5 |
+
from fastapi.responses import FileResponse, JSONResponse
|
| 6 |
from pydantic import BaseModel
|
| 7 |
|
| 8 |
app = FastAPI()
|
|
|
|
| 34 |
def health():
|
| 35 |
return {"ok": True, "service": "huggingface-local-bucket"}
|
| 36 |
|
| 37 |
+
# 📂 1. LISTAR ARQUIVOS DA PASTA MONTADA /DATA
|
| 38 |
@app.get("/files")
|
| 39 |
def list_files():
|
| 40 |
try:
|
|
|
|
| 63 |
@app.post("/upload-url")
|
| 64 |
def upload_url(payload: UploadURLRequest, request: Request):
|
| 65 |
try:
|
| 66 |
+
filename_encoded = urllib.parse.quote(payload.fileName)
|
| 67 |
# Retorna o link de upload apontando diretamente para o nosso endpoint PUT abaixo
|
| 68 |
base_url = str(request.base_url)
|
| 69 |
# Garante que use HTTPS em produção
|
| 70 |
if "hf.space" in base_url and base_url.startswith("http://"):
|
| 71 |
base_url = base_url.replace("http://", "https://", 1)
|
| 72 |
|
| 73 |
+
upload_endpoint = f"{base_url}upload-file/{filename_encoded}"
|
| 74 |
return {"ok": True, "url": upload_endpoint}
|
| 75 |
except Exception as e:
|
| 76 |
return {"ok": False, "error": str(e)}
|
|
|
|
| 79 |
@app.put("/upload-file/{filename}")
|
| 80 |
async def receive_upload(filename: str, request: Request):
|
| 81 |
try:
|
| 82 |
+
# Decodifica o nome do arquivo para salvar sem caracteres estranhos
|
| 83 |
+
filename_decoded = urllib.parse.unquote(filename)
|
| 84 |
+
filepath = os.path.join(STORAGE_DIR, filename_decoded)
|
| 85 |
|
| 86 |
# Proteção simples de segurança de diretório
|
| 87 |
if not os.path.abspath(filepath).startswith(os.path.abspath(STORAGE_DIR)):
|