Publish #1
@@ -0,0 +1,18 @@
|
||||
DISABLE_DOCS=false
|
||||
BACKEND_PORT=5000
|
||||
|
||||
LOGS_PATH=./logs
|
||||
|
||||
FILES_TTL=86400 # 1 Day
|
||||
MAX_FILES_SIZE=1073741824 # 1GB
|
||||
|
||||
S3_ACCESS_KEY_ID=Some_username
|
||||
S3_SECRET_ACCESS_KEY=Some_password
|
||||
S3_ENDPOINT_URL=Some_url
|
||||
|
||||
BUCKET_NAME=drop-me-files
|
||||
|
||||
REDIS_ADDRESS=Some_url
|
||||
REDIS_PORT=6379
|
||||
REDIS_USERNAME=Some_username
|
||||
REDIS_PASSWORD=Some_password
|
||||
+4
-2
@@ -29,7 +29,7 @@ logger.add(sys.stdout,
|
||||
disable_docs = os.getenv("DISABLE_DOCS", "true").lower() == "true"
|
||||
app: FastAPI = FastAPI(title="DropMeFiles analog",
|
||||
summary="OpenAPI schema for \"DropMeFiles analog\" project!",
|
||||
version="0.1",
|
||||
version="1.0",
|
||||
contact={"GitHub": "https://github.com/IgorVolochay/Drop-me-files-analog"},
|
||||
docs_url=None if disable_docs else "/docs",
|
||||
redoc_url=None if disable_docs else "/redoc",
|
||||
@@ -38,6 +38,8 @@ app: FastAPI = FastAPI(title="DropMeFiles analog",
|
||||
s3_worker = S3Worker()
|
||||
redis_worker = RedisWorker()
|
||||
|
||||
max_file_size = int(os.getenv('MAX_FILES_SIZE', 1048576)) # 1 MB if None
|
||||
|
||||
class RealIPMiddleware(BaseHTTPMiddleware):
|
||||
async def dispatch(self, request: Request, call_next):
|
||||
forwarded = request.headers.get("X-Forwarded-For", "")
|
||||
@@ -55,7 +57,7 @@ app.add_middleware(RealIPMiddleware)
|
||||
async def get_upload_token(file_name: str, file_type: str, file_size: int, response: Response, request: Request) -> BaseResponse:
|
||||
user_ip = request.state.client_ip
|
||||
logger.debug(f"User IP: {user_ip}; Endpoint: /upload_token; File Name: {file_name}; File Type: {file_type}; File Size: {file_size}")
|
||||
if file_size > int(os.getenv('MAX_FILES_SIZE')):
|
||||
if file_size > max_file_size:
|
||||
response.status_code = status.HTTP_413_CONTENT_TOO_LARGE
|
||||
logger.warning(f"User IP: {user_ip}; File Name: {file_name}; Exception: The file is too large")
|
||||
return BaseResponse(result="The uploaded file is too large", error=True)
|
||||
|
||||
@@ -9,7 +9,6 @@ dependencies = [
|
||||
"dotenv>=0.9.9",
|
||||
"fastapi>=0.121.1",
|
||||
"loguru>=0.7.3",
|
||||
"minio>=7.2.20",
|
||||
"pydantic>=2.12.5",
|
||||
"python-multipart>=0.0.20",
|
||||
"redis>=7.1.0",
|
||||
|
||||
+1
-8
@@ -1,5 +1,4 @@
|
||||
import os
|
||||
from datetime import datetime
|
||||
|
||||
import redis
|
||||
from dotenv import load_dotenv
|
||||
@@ -33,10 +32,4 @@ class RedisWorker:
|
||||
|
||||
|
||||
def get_record(self, file_uuid:str):
|
||||
return self.client.hgetall(file_uuid)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
worker = RedisWorker()
|
||||
worker.create_record("127.0.0.1", "some.jpg", "QWERTY", "image/jpeg", datetime.now().isoformat(), file_size=1024)
|
||||
print(worker.get_record("QWERTY"))
|
||||
return self.client.hgetall(file_uuid)
|
||||
+1
-18
@@ -1,6 +1,5 @@
|
||||
import os
|
||||
|
||||
import asyncio
|
||||
from contextlib import asynccontextmanager
|
||||
|
||||
from dotenv import load_dotenv
|
||||
@@ -43,7 +42,6 @@ class S3Worker:
|
||||
ExpiresIn=expires_in,
|
||||
)
|
||||
|
||||
|
||||
async def generate_download_url(self, key: str, filename: str, expires_in: int = 300) -> str:
|
||||
async with self.get_client() as client:
|
||||
return await client.generate_presigned_url("get_object",
|
||||
@@ -55,19 +53,4 @@ class S3Worker:
|
||||
),
|
||||
},
|
||||
ExpiresIn=expires_in,
|
||||
)
|
||||
|
||||
|
||||
async def test_run():
|
||||
worker = S3Worker()
|
||||
|
||||
url = await worker.generate_download_url("test.txt", "hello.txt")
|
||||
print(url)
|
||||
url = await worker.generate_upload_post("some.jpg", content_type="image/jpeg")
|
||||
print(url)
|
||||
url = await worker.generate_download_url("some.jpg", "image.jpg")
|
||||
print(url)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
asyncio.run(test_run())
|
||||
)
|
||||
@@ -2,7 +2,7 @@ version: "3.9"
|
||||
|
||||
services:
|
||||
minio:
|
||||
image: minio/minio:latest
|
||||
image: minio/minio:RELEASE.2025-09-07T16-13-09Z
|
||||
container_name: dmf-minio-server
|
||||
restart: always
|
||||
ports:
|
||||
@@ -21,7 +21,7 @@ services:
|
||||
retries: 5
|
||||
|
||||
minio-init:
|
||||
image: minio/mc:latest
|
||||
image: minio/mc:RELEASE.2025-09-07T16-13-09Z
|
||||
depends_on:
|
||||
minio:
|
||||
condition: service_healthy
|
||||
@@ -64,6 +64,6 @@ services:
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
restart: unless-stopped
|
||||
restart: always
|
||||
tty: true
|
||||
stdin_open: true
|
||||
|
||||
Reference in New Issue
Block a user