ManTea commited on
Commit
999afa1
·
1 Parent(s): cd94df5
Files changed (3) hide show
  1. Dockerfile +13 -0
  2. requirements.txt +4 -0
  3. upload.py +59 -0
Dockerfile ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ FROM python:3.9
2
+
3
+ RUN useradd -m -u 1000 user
4
+ USER user
5
+ ENV PATH="/home/user/.local/bin:$PATH"
6
+
7
+ WORKDIR /app
8
+
9
+ COPY --chown=user ./requirements.txt requirements.txt
10
+ RUN pip install --no-cache-dir --upgrade -r requirements.txt
11
+
12
+ COPY --chown=user . /app
13
+ CMD ["uvicorn", "upload:app", "--host", "0.0.0.0", "--port", "7860"]
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ fastapi
2
+ uvicorn[standard]
3
+ firebase_admin
4
+ uuid
upload.py ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import os
2
+ from fastapi import FastAPI, File, UploadFile, HTTPException
3
+ from firebase_admin import credentials, initialize_app, storage
4
+ from uuid import uuid4
5
+ import json
6
+
7
+ # Khởi tạo FastAPI app
8
+ app = FastAPI()
9
+
10
+ # Đường dẫn đến file JSON chứa thông tin xác thực Firebase
11
+ firebase_creds = os.getenv("FIREBASE_CREDENTIALS")
12
+ cred_dict = json.loads(firebase_creds)
13
+ cred = credentials.Certificate(cred_dict)
14
+ initialize_app(cred, {
15
+ 'storageBucket': 'trans-paper.appspot.com'
16
+ })
17
+
18
+ # Cấu hình thư mục tạm thời để lưu file trước khi tải lên Firebase
19
+ UPLOAD_FOLDER = 'uploads'
20
+ if not os.path.exists(UPLOAD_FOLDER):
21
+ os.makedirs(UPLOAD_FOLDER)
22
+
23
+ # Hàm để upload file lên Firebase
24
+ def upload_file_to_firebase(file_path: str, filename: str):
25
+ bucket = storage.bucket()
26
+ blob = bucket.blob(filename)
27
+ blob.upload_from_filename(file_path)
28
+ blob.make_public() # Tạo đường dẫn công khai
29
+ return blob.public_url
30
+
31
+ # API cho phép user tải ảnh lên
32
+ @app.post("/upload/")
33
+ async def upload_image(file: UploadFile = File(...)):
34
+ try:
35
+ file_name = f"{uuid4()}_{file.filename}"
36
+ file_path = f"uploads/{file_name}"
37
+
38
+ # Lưu file tạm vào thư mục
39
+ with open(file_path, "wb") as buffer:
40
+ buffer.write(await file.read())
41
+
42
+ # Upload file lên Firebase
43
+ public_url = upload_file_to_firebase(file_path, file_name)
44
+
45
+ # Xóa file tạm sau khi upload
46
+ if os.path.exists(file_path):
47
+ os.remove(file_path)
48
+
49
+ return {"message": "File uploaded successfully", "url": public_url}
50
+
51
+ except Exception as e:
52
+ # In ra thông báo lỗi chi tiết
53
+ print(f"Error: {str(e)}")
54
+ raise HTTPException(status_code=500, detail=f"Upload failed: {str(e)}")
55
+
56
+ # Chạy ứng dụng với Uvicorn
57
+ if __name__ == "__main__":
58
+ import uvicorn
59
+ uvicorn.run(app, host="0.0.0.0", port=8000)