[+] File server

This commit is contained in:
2025-11-25 11:36:30 +08:00
parent c4f3435d9f
commit f5cfa3cdb8
4 changed files with 36 additions and 3 deletions
+2 -1
View File
@@ -27,4 +27,5 @@ public/assets/fonts/cache
.idea
static/audio
temp_audio
.stfolder
.stfolder
storage/
+2
View File
@@ -6,6 +6,8 @@ services:
dockerfile: deploy/Dockerfile.web
ports:
- "127.0.0.1:3000:3000"
volumes:
- ./data/storage:/app/storage
environment:
- ORIGIN=http://localhost:3000
- MONGO_URL=mongodb://cat:meow@db:27017/amaoke?authSource=admin
+2 -2
View File
@@ -8,10 +8,10 @@ import type { ObjectId } from 'mongodb'
import '../ext'
import { promises as fs } from 'fs'
import path from 'path'
import { waitFor } from '../utils'
import { separateSong } from './separator'
const CACHE_DIR = path.resolve('static/audio')
const CACHE_DIR = path.resolve('storage/audio')
export const getAudioFile = (songId: string, filename: string) => path.join(CACHE_DIR, songId, filename)
const neCookie = async () => (await dbs.serverProps
.findOne({ name: 'global_settings' }))?.netease_login_cookie
@@ -0,0 +1,30 @@
import { getAudioFile } from '$lib/server/songs';
import { error } from '@sveltejs/kit';
import fs from 'fs/promises';
import path from 'path';
import type { RequestHandler } from './$types';
export const GET: RequestHandler = async ({ params }) => {
const { songId, file } = params;
const filePath = getAudioFile(songId, file);
try {
await fs.access(filePath);
} catch {
throw error(404, 'File not found');
}
const ext = path.extname(file).toLowerCase();
let contentType = 'application/octet-stream';
if (ext === '.mp3') contentType = 'audio/mpeg';
if (ext === '.opus') contentType = 'audio/ogg';
const buffer = await fs.readFile(filePath);
return new Response(buffer, {
headers: {
'Content-Type': contentType,
'Cache-Control': 'public, max-age=31536000'
}
});
};