Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 

35 linhas
1.1 KiB

  1. import { NextResponse } from 'next/server';
  2. import fs from 'fs';
  3. import path from 'path';
  4. export const dynamic = 'force-dynamic';
  5. export async function GET(request: Request) {
  6. const { searchParams } = new URL(request.url);
  7. const name = searchParams.get('name');
  8. if (!name) return new NextResponse('File name required', { status: 400 });
  9. const filePath = path.join(process.cwd(), 'data', 'uploads', name);
  10. try {
  11. const fileBuffer = fs.readFileSync(filePath);
  12. // Determine basic mime types
  13. const ext = path.extname(name).toLowerCase();
  14. let mimeType = 'image/jpeg';
  15. if (ext === '.png') mimeType = 'image/png';
  16. if (ext === '.gif') mimeType = 'image/gif';
  17. if (ext === '.svg') mimeType = 'image/svg+xml';
  18. if (ext === '.webp') mimeType = 'image/webp';
  19. return new NextResponse(fileBuffer, {
  20. headers: {
  21. 'Content-Type': mimeType,
  22. 'Cache-Control': 'public, max-age=86400', // Cache in browser for 1 day
  23. },
  24. });
  25. } catch (error) {
  26. return new NextResponse('Image not found', { status: 404 });
  27. }
  28. }