From 0e4eeb5f19b0c20b2c877dfe78464ca39147454e Mon Sep 17 00:00:00 2001 From: Sphericalkat Date: Mon, 17 Jun 2024 18:40:45 +0530 Subject: [PATCH] feat: implement file upload and fetching Signed-off-by: Sphericalkat --- .prettierrc | 3 +- src/lib/pocketbase.ts | 5 +++ src/routes/+page.server.ts | 6 +++ src/routes/+page.svelte | 63 +++++++++++++++++++++++++++++- src/routes/files/[slug]/+server.ts | 21 ++++++++++ 5 files changed, 95 insertions(+), 3 deletions(-) create mode 100644 src/lib/pocketbase.ts create mode 100644 src/routes/+page.server.ts create mode 100644 src/routes/files/[slug]/+server.ts diff --git a/.prettierrc b/.prettierrc index 9573023..2ebeff6 100644 --- a/.prettierrc +++ b/.prettierrc @@ -1,5 +1,6 @@ { - "useTabs": true, + "useTabs": false, + "tabWidth": 2, "singleQuote": true, "trailingComma": "none", "printWidth": 100, diff --git a/src/lib/pocketbase.ts b/src/lib/pocketbase.ts new file mode 100644 index 0000000..e59b21f --- /dev/null +++ b/src/lib/pocketbase.ts @@ -0,0 +1,5 @@ +import Pocketbase from 'pocketbase'; +import { PUBLIC_POCKETBASE_URL } from '$env/static/public'; + +const client = new Pocketbase(PUBLIC_POCKETBASE_URL) +export default client; diff --git a/src/routes/+page.server.ts b/src/routes/+page.server.ts new file mode 100644 index 0000000..91aacbe --- /dev/null +++ b/src/routes/+page.server.ts @@ -0,0 +1,6 @@ +export const actions = { + default: async (event) => { + // upload file + console.log(event); + } +}; diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 5982b0a..2a8baa8 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,2 +1,61 @@ -

Welcome to SvelteKit

-

Visit kit.svelte.dev to read the documentation

+ + +
+

KatStash

+ +

+ Uploads up to 200 MB are allowed. Contact SphericalKat for more details +

+ + {#if completeMessage} +

Upload complete1

+ {/if} + +
+ +
+
diff --git a/src/routes/files/[slug]/+server.ts b/src/routes/files/[slug]/+server.ts new file mode 100644 index 0000000..093d75a --- /dev/null +++ b/src/routes/files/[slug]/+server.ts @@ -0,0 +1,21 @@ +import { json, redirect } from '@sveltejs/kit'; +import Pocketbase from 'pocketbase'; +import { PUBLIC_POCKETBASE_URL } from '$env/static/public'; + +export async function GET({ params: { slug } }) { + let fileUrl = null; + try { + const pocketbase = new Pocketbase(PUBLIC_POCKETBASE_URL); + const record = await pocketbase.collection('uploads').getOne(slug); + fileUrl = new URL( + `${PUBLIC_POCKETBASE_URL}/api/files/${record.collectionId}/${record.id}/${record.file}` + ); + } catch (error) { + console.error(error); + return redirect(307, '/404'); + } + + if (fileUrl) { + redirect(301, fileUrl); + } +}