我的公共文件夹(next js app)中有一个PDF文件,我将其附加到电子邮件(sendgrid)中。
在开发中,一切都运行良好。当我运行build + run start时也是如此。所以我想这和维塞尔有关。当我检查生产(Vercel)中的日志时,我看到以下错误:
错误:ENOENT:没有这样的文件或目录,打开“public/assets/Bonus_1.pdf”
有什么办法解决这个问题吗?
下面是相关代码:
const pathToAttachment1 = path.join("public", "assets", "Bonus_1.pdf")
const attachment1 = fs.readFileSync(pathToAttachment1).toString("base64");
sgMail.setApiKey(process.env.SENDGRID_API_KEY);
const msg = {
to: process.env.NODE_ENV === "development" ? "info@test.com" : email,
from: "test",
attachments: [
{
content: attachment1,
filename: "Bonus_1.pdf",
type: "application/pdf",
disposition: "attachment",
},
],
templateId: "xxx",
};
sgMail.send(msg).then(() => {res.status(200).json({ message: "Mail sen!" });
});
为了检查公共目录中的资产,我添加了以下代码:
const files = fs.readdirSync(path.join("public", "assets"))
console.log("files:", files)
输出如下所示:
files: [
'1.png',
'Bonus_1.pdf' ]
2条答案
按热度按时间7eumitmz1#
我最初假设您在
app
目录下运行代码(在我的测试中,您的代码运行得非常好),但我最终能够在pages/api
下复制您的问题。path.resolve
应该解决您的错误:voj3qocg2#
如果文件包含在公共目录中,则您提供的路径是错误的。资源路径中不包括公用文件夹。
考虑到这一点,你的路径应该是:
/assets/Bonus_1.pdf
.记住
Vercel的部署文件系统是只读的,因此任何会导致文件被打开或修改的操作(如使用
fs
模块的某些方法)在部署到云时都会出错。