diff --git a/docker-compose.yml b/docker-compose.yml index 4ec4f3d..d7f8641 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,6 +5,8 @@ services: dockerfile: Dockerfile container_name: platform-frontend-v2 restart: unless-stopped + volumes: + - ./screenshots:/app/screenshots environment: - ORIGIN=${PLATFORM_V2_ORIGIN:-https://dash.quadjourney.com} - GATEWAY_URL=http://gateway:8100 diff --git a/frontend-v2/src/routes/(app)/upload/+page.svelte b/frontend-v2/src/routes/(app)/upload/+page.svelte new file mode 100644 index 0000000..0633003 --- /dev/null +++ b/frontend-v2/src/routes/(app)/upload/+page.svelte @@ -0,0 +1,117 @@ + + + + + +
{ e.preventDefault(); dragOver = true; }} + ondragleave={() => dragOver = false} + ondrop={handleDrop} +> +
+ {#if uploading} +
Uploading...
+ {:else if lastFile} +
+
Saved
+
{lastFile}
+ +
+ {:else} +
+
+ +
+
Drop a file, paste a screenshot, or click to upload
+ +
+ {/if} +
+
+ + diff --git a/frontend-v2/src/routes/(app)/upload/+server.ts b/frontend-v2/src/routes/(app)/upload/+server.ts new file mode 100644 index 0000000..d12a182 --- /dev/null +++ b/frontend-v2/src/routes/(app)/upload/+server.ts @@ -0,0 +1,25 @@ +import { json } from '@sveltejs/kit'; +import type { RequestHandler } from './$types'; +import fs from 'fs'; +import path from 'path'; + +const UPLOAD_DIR = '/app/screenshots'; + +export const POST: RequestHandler = async ({ request }) => { + const formData = await request.formData(); + const file = formData.get('file') as File; + if (!file) return json({ error: 'No file' }, { status: 400 }); + + const timestamp = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19); + const ext = file.name.split('.').pop() || 'png'; + const filename = `${timestamp}.${ext}`; + + const buffer = Buffer.from(await file.arrayBuffer()); + + // Ensure directory exists + if (!fs.existsSync(UPLOAD_DIR)) fs.mkdirSync(UPLOAD_DIR, { recursive: true }); + + fs.writeFileSync(path.join(UPLOAD_DIR, filename), buffer); + + return json({ ok: true, filename, path: `/app/screenshots/${filename}` }); +};