mirror of
https://github.com/kmc7468/arkvault.git
synced 2026-02-04 08:06:56 +00:00
IV를 암호화된 파일 및 썸네일 앞에 합쳐서 전송하도록 변경
This commit is contained in:
@@ -1,10 +1,15 @@
|
||||
import { error } from "@sveltejs/kit";
|
||||
import { z } from "zod";
|
||||
import { authorize } from "$lib/server/modules/auth";
|
||||
import { parseRangeHeader, getContentRangeHeader } from "$lib/server/modules/http";
|
||||
import { getFileStream } from "$lib/server/services/file";
|
||||
import type { RequestHandler } from "./$types";
|
||||
|
||||
export const GET: RequestHandler = async ({ locals, params }) => {
|
||||
const downloadHandler = async (
|
||||
locals: App.Locals,
|
||||
params: Record<string, string>,
|
||||
request: Request,
|
||||
) => {
|
||||
const { userId } = await authorize(locals, "activeClient");
|
||||
|
||||
const zodRes = z
|
||||
@@ -15,11 +20,29 @@ export const GET: RequestHandler = async ({ locals, params }) => {
|
||||
if (!zodRes.success) error(400, "Invalid path parameters");
|
||||
const { id } = zodRes.data;
|
||||
|
||||
const { encContentStream, encContentSize } = await getFileStream(userId, id);
|
||||
return new Response(encContentStream as ReadableStream, {
|
||||
const { encContentStream, range } = await getFileStream(
|
||||
userId,
|
||||
id,
|
||||
parseRangeHeader(request.headers.get("Range")),
|
||||
);
|
||||
return {
|
||||
stream: encContentStream,
|
||||
headers: {
|
||||
"Accept-Ranges": "bytes",
|
||||
"Content-Length": (range.end - range.start + 1).toString(),
|
||||
"Content-Type": "application/octet-stream",
|
||||
"Content-Length": encContentSize.toString(),
|
||||
...getContentRangeHeader(range),
|
||||
},
|
||||
});
|
||||
isRangeRequest: !!range,
|
||||
};
|
||||
};
|
||||
|
||||
export const GET: RequestHandler = async ({ locals, params, request }) => {
|
||||
const { stream, headers, isRangeRequest } = await downloadHandler(locals, params, request);
|
||||
return new Response(stream as ReadableStream, { status: isRangeRequest ? 206 : 200, headers });
|
||||
};
|
||||
|
||||
export const HEAD: RequestHandler = async ({ locals, params, request }) => {
|
||||
const { headers, isRangeRequest } = await downloadHandler(locals, params, request);
|
||||
return new Response(null, { status: isRangeRequest ? 206 : 200, headers });
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user