Files
torrent_backend/file_handler.py
2024-05-10 14:20:46 +04:00

42 lines
1.7 KiB
Python

import hashlib
from io import BytesIO
import mimetypes
from pathlib import Path
from typing import Literal
import aiofiles
from fastapi import UploadFile
from PIL import Image
def create_hash_name(filename: str):
return str(hashlib.sha1(filename.encode()).hexdigest())
async def save_torrent_file(torrent: UploadFile):
hash_filename = create_hash_name(torrent.filename)+".torrent"
async with aiofiles.open(Path() / "content" / "torrent"
/ hash_filename, 'wb') as file:
await file.write(await torrent.read())
return hash_filename
async def save_image(cover: UploadFile, type: Literal["cover", "screenshot"]):
hash_filename = create_hash_name(cover.filename) \
+ mimetypes.guess_extension(cover.content_type)
async with aiofiles.open(Path() / "content" / "images" / type / "full_size"
/ hash_filename, 'wb') as full_size_file, \
aiofiles.open(Path() / "content" / "images" / type /
"preview" / hash_filename, 'wb') as preview_file:
cover_data = await cover.read()
await full_size_file.write(cover_data)
image = Image.open(BytesIO(cover_data))
compressed_coefficient = (image.size[0] * image.size[1]) / (1280*720/4)
if(compressed_coefficient < 1): compressed_coefficient = 1
compressed_image = image.resize(
( int(image.size[0] / compressed_coefficient),
int(image.size[1] / compressed_coefficient) )
)
buf = BytesIO()
compressed_image.save(buf, format=
cover.content_type.upper().replace("IMAGE/", ""))
await preview_file.write(buf.getbuffer())
return hash_filename