feat: B2 uit voor veilige archive-downloads
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -4,8 +4,9 @@ from fastapi import APIRouter, Depends, File, Form, Query, Request, UploadFile
|
||||
from fastapi.responses import StreamingResponse
|
||||
from starlette.background import BackgroundTask
|
||||
|
||||
from backend.app.api.schemas import DeleteRequest, DeleteResponse, FileInfoResponse, MkdirRequest, MkdirResponse, RenameRequest, RenameResponse, SaveRequest, SaveResponse, UploadResponse, ViewResponse
|
||||
from backend.app.dependencies import get_file_ops_service
|
||||
from backend.app.api.schemas import ArchivePrepareRequest, DeleteRequest, DeleteResponse, FileInfoResponse, MkdirRequest, MkdirResponse, RenameRequest, RenameResponse, SaveRequest, SaveResponse, TaskCreateResponse, UploadResponse, ViewResponse
|
||||
from backend.app.dependencies import get_archive_download_task_service, get_file_ops_service
|
||||
from backend.app.services.archive_download_task_service import ArchiveDownloadTaskService
|
||||
from backend.app.services.file_ops_service import FileOpsService
|
||||
|
||||
router = APIRouter(prefix="/files")
|
||||
@@ -78,6 +79,27 @@ async def download(
|
||||
return response
|
||||
|
||||
|
||||
@router.post("/download/archive-prepare", response_model=TaskCreateResponse, status_code=202)
|
||||
async def archive_prepare(
|
||||
request: ArchivePrepareRequest,
|
||||
service: ArchiveDownloadTaskService = Depends(get_archive_download_task_service),
|
||||
) -> TaskCreateResponse:
|
||||
return service.create_archive_prepare_task(paths=request.paths)
|
||||
|
||||
|
||||
@router.get("/download/archive/{task_id}")
|
||||
async def archive_download(
|
||||
task_id: str,
|
||||
service: ArchiveDownloadTaskService = Depends(get_archive_download_task_service),
|
||||
) -> StreamingResponse:
|
||||
prepared = service.prepare_ready_archive_download(task_id=task_id)
|
||||
return StreamingResponse(
|
||||
prepared["content"],
|
||||
headers=prepared["headers"],
|
||||
media_type=prepared["content_type"],
|
||||
)
|
||||
|
||||
|
||||
@router.get("/video")
|
||||
async def video(
|
||||
path: str,
|
||||
|
||||
@@ -88,6 +88,10 @@ class SaveResponse(BaseModel):
|
||||
modified: str
|
||||
|
||||
|
||||
class ArchivePrepareRequest(BaseModel):
|
||||
paths: list[str]
|
||||
|
||||
|
||||
class FileInfoResponse(BaseModel):
|
||||
name: str
|
||||
path: str
|
||||
|
||||
Reference in New Issue
Block a user