FirebaseNFT / upload.py
ManTea's picture
1
999afa1
raw
history blame
1.93 kB
import os
from fastapi import FastAPI, File, UploadFile, HTTPException
from firebase_admin import credentials, initialize_app, storage
from uuid import uuid4
import json
# Khởi tạo FastAPI app
app = FastAPI()
# Đường dẫn đến file JSON chứa thông tin xác thực Firebase
firebase_creds = os.getenv("FIREBASE_CREDENTIALS")
cred_dict = json.loads(firebase_creds)
cred = credentials.Certificate(cred_dict)
initialize_app(cred, {
'storageBucket': 'trans-paper.appspot.com'
})
# Cấu hình thư mục tạm thời để lưu file trước khi tải lên Firebase
UPLOAD_FOLDER = 'uploads'
if not os.path.exists(UPLOAD_FOLDER):
os.makedirs(UPLOAD_FOLDER)
# Hàm để upload file lên Firebase
def upload_file_to_firebase(file_path: str, filename: str):
bucket = storage.bucket()
blob = bucket.blob(filename)
blob.upload_from_filename(file_path)
blob.make_public() # Tạo đường dẫn công khai
return blob.public_url
# API cho phép user tải ảnh lên
@app.post("/upload/")
async def upload_image(file: UploadFile = File(...)):
try:
file_name = f"{uuid4()}_{file.filename}"
file_path = f"uploads/{file_name}"
# Lưu file tạm vào thư mục
with open(file_path, "wb") as buffer:
buffer.write(await file.read())
# Upload file lên Firebase
public_url = upload_file_to_firebase(file_path, file_name)
# Xóa file tạm sau khi upload
if os.path.exists(file_path):
os.remove(file_path)
return {"message": "File uploaded successfully", "url": public_url}
except Exception as e:
# In ra thông báo lỗi chi tiết
print(f"Error: {str(e)}")
raise HTTPException(status_code=500, detail=f"Upload failed: {str(e)}")
# Chạy ứng dụng với Uvicorn
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)