feat: Full upload functionality

This commit is contained in:
April Hall 2025-02-21 19:28:14 -05:00
parent 724e473755
commit 188d3e8318
Signed by: arithefirst
GPG Key ID: 4508A15C4DB91C5B
4 changed files with 39 additions and 7 deletions

View File

@ -4,9 +4,13 @@
let files: FileList;
function submit() {
async function submit(e: SubmitEvent) {
e.preventDefault();
if (files.length === 0) return;
generateStream(files[0]);
const success = await generateStream(files[0]);
if (success) {
// success feedback
}
}
</script>

View File

@ -1,8 +1,11 @@
export async function generateStream(file: File): Promise<boolean> {
try {
const formData = new FormData();
formData.append('file', file);
await fetch(`/api/upload/`, {
method: 'POST',
body: file,
body: formData,
});
return true;

View File

@ -31,10 +31,16 @@ class MinioClient {
console.log('Bucket "' + bucket + '" created in "us-east-1".');
}
const upload = await this.client.putObject(bucket, v4(), stream);
console.log(upload);
const objectId = v4();
const upload = await this.client.putObject(bucket, objectId, stream);
return {
bucket,
objectId,
etag: upload.etag,
};
} catch (e) {
console.error(`Error uploading file: ${(e as Error).message}`);
throw e;
}
}
}

View File

@ -1,5 +1,7 @@
import { error } from '@sveltejs/kit';
import { error, json } from '@sveltejs/kit';
import { auth } from '$lib/server/db/auth';
import { fsClient } from '$lib/server/storage/minio-client';
import { Readable } from 'stream';
export const POST = async ({ request }) => {
const session = await auth.api.getSession({
@ -10,5 +12,22 @@ export const POST = async ({ request }) => {
return error(401, 'Not authorized. Please sign up at /sign-up');
}
return new Response(undefined, { status: 204 });
try {
const formData = await request.formData();
const file = formData.get('file');
if (!file || !(file instanceof File)) {
return error(400, 'No file provided');
}
const buffer = await file.arrayBuffer();
const stream = Readable.from(Buffer.from(buffer));
const uploadResponse = await fsClient?.uploadProfile(stream);
return json(uploadResponse);
} catch (e) {
console.error(e);
return error(500, 'Error uploading file');
}
};