diff --git a/.gitignore b/.gitignore index 77398b6..f90bca4 100644 --- a/.gitignore +++ b/.gitignore @@ -19,7 +19,7 @@ # production /build -/public/uploads/ +/uploads/ db.json # misc diff --git a/src/app/[stream]/podcasts/podcastCard.tsx b/src/app/[stream]/podcasts/podcastCard.tsx index 8f73fdc..7596e39 100644 --- a/src/app/[stream]/podcasts/podcastCard.tsx +++ b/src/app/[stream]/podcasts/podcastCard.tsx @@ -25,11 +25,13 @@ export default function PodcastCard({

{title}

-
- {description} +
+
+ {description} +
+ {!descriptionExpanded && ( +
+ )}
diff --git a/src/common/helpers/data.ts b/src/common/helpers/data.ts index ec653c6..4969650 100644 --- a/src/common/helpers/data.ts +++ b/src/common/helpers/data.ts @@ -21,7 +21,7 @@ export const convertUrlToPublic = (url?: string) => { }; export const preparePodcastItem = (podcast: PodcastDto) => { - const fileSize = getFileSize(path.join(process.cwd(), `public/uploads/${podcast.url}`)), + const fileSize = getFileSize(path.join(process.cwd(), `uploads/${podcast.url}`)), fileUrl = convertUrlToPublic(podcast.url); return { diff --git a/src/middleware.ts b/src/middleware.ts new file mode 100644 index 0000000..420e167 --- /dev/null +++ b/src/middleware.ts @@ -0,0 +1,15 @@ +import { NextRequest, NextResponse } from 'next/server'; + +export function middleware(req: NextRequest) { + const basePath = process.env.NEXT_PUBLIC_BASE_PATH || ''; + const url = req.nextUrl.clone(); + + const adjustedPathname = url.pathname.replace(basePath, ''); + + if (adjustedPathname.startsWith('/uploads/')) { + url.pathname = `/api${adjustedPathname}`; + return NextResponse.rewrite(url); + } + + return NextResponse.next(); +} \ No newline at end of file diff --git a/src/pages/api/[stream]/podcasts.ts b/src/pages/api/[stream]/podcasts.ts index 0ee89bd..3cd3199 100644 --- a/src/pages/api/[stream]/podcasts.ts +++ b/src/pages/api/[stream]/podcasts.ts @@ -27,7 +27,7 @@ const post = async (req: NextApiRequest, res: NextApiResponse) => { return res.status(400).json({ error: 'Invalid stream parameter' }); } - const uploadDir = path.join(process.cwd(), 'public/uploads'); + const uploadDir = path.join(process.cwd(), 'uploads'); await fs.mkdir(uploadDir, { recursive: true }); const form = new multiparty.Form({ uploadDir @@ -80,37 +80,6 @@ const post = async (req: NextApiRequest, res: NextApiResponse) => { res.status(500).json({ error: 'Internal server error' }); } }); - - // try { - // const { title, description, author, image, file } = req.body; - - // const uploadDir = path.join(process.cwd(), 'public/uploads'); - // const imageFileName = `${uuidv4()}${path.extname(image.name)}`; - // const imageFilePath = path.join(uploadDir, imageFileName); - // await fs.writeFile(imageFilePath, Buffer.from(image.data, 'base64')); - - // const podcastFileName = `${uuidv4()}${path.extname(file.name)}`; - // const podcastFilePath = path.join(uploadDir, podcastFileName); - // await fs.writeFile(podcastFilePath, Buffer.from(file.data, 'base64')); - - // const podcastData: PodcastDto = { - // podcastId: uuidv4(), - // streamId: stream, - // title, - // description, - // uploadDate: Date.now().toString(), - // author, - // imageUrl: imageFileName, - // url: podcastFileName, - // }; - - // await publishPodcast(podcastData); - - // res.status(201).json({ message: 'Podcast created successfully' }); - // } catch (error) { - // console.error('Error handling request:', error); - // res.status(500).json({ error: 'Internal server error' }); - // } }; export default function handler( diff --git a/src/pages/api/uploads/[file].ts b/src/pages/api/uploads/[file].ts new file mode 100644 index 0000000..09f0a2e --- /dev/null +++ b/src/pages/api/uploads/[file].ts @@ -0,0 +1,16 @@ +import { NextApiRequest, NextApiResponse } from 'next'; +import path from 'path'; +import fs from 'fs'; + +export default function handler(req: NextApiRequest, res: NextApiResponse) { + const { file } = req.query; + + const filePath = path.join(process.cwd(), 'uploads', file as string); + + if (!fs.existsSync(filePath)) { + return res.status(404).json({ error: 'File not found' }); + } + + res.setHeader('Content-Type', 'application/octet-stream'); + fs.createReadStream(filePath).pipe(res); +} \ No newline at end of file