Files
yt2mp3/server/routes/download/[file].get.ts
2026-01-19 13:56:44 +00:00

38 lines
1.3 KiB
TypeScript

import { createReadStream, existsSync, unlink, unlinkSync } from "node:fs"
import { } from "fs/promises"
import { join } from "path"
import { decode } from "node:punycode"
export default defineEventHandler(async (event) => {
const session = await getUserSession(event)
const conf = useRuntimeConfig()
//const query = await getQuery(event)
// @ts-ignore
const userId = session.secure?.user_id;
if (userId == undefined || userId == null)
throw createError({ status: 401 })
let file = getRouterParam(event, 'file');
if (file == undefined)
throw createError({ status: 400, message: "No file"})
else
file = decodeURI(file)
//const def_filepath = "/home/suricatingss/Projects/WebStorm/yt2mp3/server/fastapi_server/downloads";
const def_filepath = conf.download_path
const filepath = join(def_filepath, userId.toString(), file)
console.log(filepath)
if (!existsSync(filepath))
throw createError({ status: 404, message: "Not found"})
setHeader(event, 'Content-Disposition', `attachment; filename="${file}"`)
const file_stream = createReadStream(filepath)
//file_stream.on("close", () => unlink(filepath, (err) => { if (err) console.warn(err.message) }))
return file_stream;
})