file-upload.ts 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. 'use server';
  2. import { prisma } from '@/lib/prisma';
  3. export async function uploadFile(file: File) {
  4. try {
  5. const bytes = await file.arrayBuffer();
  6. const buffer = Buffer.from(bytes);
  7. const uploadedFile = await prisma.file.create({
  8. data: {
  9. filename: file.name,
  10. mimetype: file.type,
  11. size: file.size,
  12. data: buffer,
  13. },
  14. });
  15. return {
  16. id: uploadedFile.id,
  17. filename: uploadedFile.filename,
  18. mimetype: uploadedFile.mimetype,
  19. size: uploadedFile.size,
  20. createdAt: uploadedFile.createdAt.toISOString(),
  21. updatedAt: uploadedFile.updatedAt.toISOString(),
  22. };
  23. } catch (error) {
  24. console.error('Error uploading file:', error);
  25. throw new Error('Failed to upload file');
  26. }
  27. }
  28. export async function getFileById(id: string) {
  29. try {
  30. const file = await prisma.file.findUnique({
  31. where: { id },
  32. });
  33. if (!file) {
  34. return { success: false, error: 'File not found' };
  35. }
  36. return { success: true, data: file };
  37. } catch (error) {
  38. console.error('Error fetching file:', error);
  39. return { success: false, error: 'Failed to fetch file' };
  40. }
  41. }