Init code
This commit is contained in:
44
app/utils/uploader.py
Normal file
44
app/utils/uploader.py
Normal file
@@ -0,0 +1,44 @@
|
||||
from abc import ABC, abstractmethod
|
||||
|
||||
|
||||
class ChunkUploadBackend(ABC):
|
||||
@abstractmethod
|
||||
def start(self, filename: str) -> None:
|
||||
"""Начало загрузки нового файла"""
|
||||
|
||||
@abstractmethod
|
||||
def upload_chunk(self, chunk: bytes) -> None:
|
||||
"""Загрузка очередного чанка"""
|
||||
|
||||
@abstractmethod
|
||||
def finish(self) -> None:
|
||||
"""Завершение загрузки"""
|
||||
|
||||
@abstractmethod
|
||||
def abort(self) -> None:
|
||||
"""Прерывания загрузки"""
|
||||
|
||||
|
||||
class DiskChunkUploadBackend(ChunkUploadBackend):
|
||||
def __init__(self, base_path: str):
|
||||
import os
|
||||
|
||||
self.os = os
|
||||
|
||||
self.base_path = base_path
|
||||
self.os.makedirs(self.base_path, exist_ok=True)
|
||||
self._file = None
|
||||
|
||||
def start(self, filename):
|
||||
self._file = open(self.os.path.join(self.base_path, filename), "wb")
|
||||
|
||||
def upload_chunk(self, chunk: bytes):
|
||||
self._file.write(chunk)
|
||||
|
||||
def finish(self):
|
||||
self._file.close()
|
||||
|
||||
def abort(self):
|
||||
if self._file:
|
||||
self._file.close()
|
||||
self._file = None
|
||||
Reference in New Issue
Block a user