file-upload.ts 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. 'use server';
  2. import { prisma } from '@/lib/prisma';
  3. export async function uploadFile(file: File, userId: string) {
  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. userId: userId,
  14. },
  15. });
  16. return {
  17. id: uploadedFile.id,
  18. filename: uploadedFile.filename,
  19. mimetype: uploadedFile.mimetype,
  20. size: uploadedFile.size,
  21. userId: uploadedFile.userId,
  22. createdAt: uploadedFile.createdAt.toISOString(),
  23. updatedAt: uploadedFile.updatedAt.toISOString(),
  24. };
  25. } catch (error) {
  26. console.error('Error uploading file:', error);
  27. throw new Error('Failed to upload file');
  28. }
  29. }
  30. export async function getFileById(id: string) {
  31. try {
  32. const file = await prisma.file.findUnique({
  33. where: { id },
  34. });
  35. if (!file) {
  36. return { success: false, error: 'File not found' };
  37. }
  38. return { success: true, data: file };
  39. } catch (error) {
  40. console.error('Error fetching file:', error);
  41. return { success: false, error: 'Failed to fetch file' };
  42. }
  43. }