我只是想知道是否可以使用服务器操作将文件上传到 nextjs 项目的某个文件夹(可能是公共文件夹),例如存储图像、文档、工作表和 pdf 内容。
在nodejs中,我们有 multer 和强大的,但我坚持服务器操作,因为它不使用
'Content-Type': 'multipart/form-data
我需要存储申请人的姓名、电子邮件、电话和简历等信息。我想知道服务器操作是否可能。
"use server";
import prisma from "@/utils/prisma";
import fs from "fs";
import FormData from "form-data";
import path from "path";
import { v4 as uuid } from "uuid";
const uploadApplicant = async (
name: string,
email: string,
tel: string,
file: File | null
) => {
const fileName = uuid();
const formData = new FormData();
formData.append("file", file);
console.log("Form data: ", formData);
const binaryData = formData.getBuffer();
console.log("Binary: ");
console.log(binaryData);
const filePath = path.join(
__dirname,
"../../../../",
"public",
"uploads",
`${fileName}.pdf`
);
fs.writeFileSync(filePath, binaryData, "binary");
await prisma.applicant.create({
data: {
name,
tel,
email,
fileName,
},
});
};
export default uploadApplicant;
文件对象是一个 Web API,仅在浏览器环境中可用,在 Node.js 中不可用。
当您需要将文件上传到服务器时,通常不会将整个 File 对象发送到服务器。相反,您可以将文件数据作为二进制流(数组缓冲区)发送。这通常是使用 FormData 对象来完成的,它可以处理文件上传。或者您应该在客户端处理文件上传。