生产环境 (vercel) 上的 Multer 磁盘存储目标错误

问题描述 投票:0回答:3

我在前端使用react,在后端使用node js express js multer和mongodb,在开发服务器(本地主机)中它绝对没问题,即使使用postman测试也没有错误,但是当我使用生产服务器(部署在vercel) 给出此错误 “ENOENT:没有此类文件或目录,请在 axios put 方法响应中打开 'public/startupIcons/startupIcon-1673682105301-871934982.jpg'”

我尝试更改目录,检查 vercel 生产源目录(该文件夹在那里可用),但没有任何效果。 其乘法器特定错误

1

multer 配置


const storage = multer.diskStorage({
    destination: (req, file, cb) => {
        if (file.fieldname === 'startupIcon') {
            cb(null, '/public/images');
        } else if (file.fieldname === 'companyId') {
            cb(null, '/uploads/companyIds');
        } else if (file.fieldname === 'documents') {
            cb(null, '/uploads/companyIds');
        }
    },

    filename: (req, file, cb) => {
      

        cb(null, `${new Date().toISOString().replace(/:/g, '-')}-${file.originalname}`);
    },
   
});
const filter = (req, file, cb) => {
    const type = file.mimetype.split('/')[1];
    if (file.fieldname === 'startupIcon') {
        if (type === 'jpg' || type === 'jpeg' || type === 'png') {
            cb(null, true);
        } else {
            cb(new Error('Not a jpg/jpeg File!!'), false);
        }
    }
    if (file.fieldname === 'companyId' || file.fieldname === 'documents') {
        if (type === 'pdf' || type === 'jpg' || type === 'jpeg' || type === 'png') {
            cb(null, true);
        } else {
            cb(new Error('file should be in .pdf|.jpg|.jpeg|.png format!!'), false);
        }
    }
};
const upload = multer({
    storage,
    limits: {
        fileSize: 1000000,
        // fieldSize:  1016 * 1016,
    },
    fileFilter: filter,
});

module.exports = upload;
node.js express axios multer vercel
3个回答
0
投票

问题其实很简单。 Nextjs 不希望您在部署后更改文件或将文件添加到公用文件夹中。这也不是问题。如果您进行构建并在下次启动时使用,您可以在本地尝试。它也不会起作用。它是一个安全问题,接下来只允许访问构建时存在的公共文件。 Nextjs 希望您使用 CDN 来处理动态文件。我们所做的是使用另一个名为 files/assets 或 uploads 的文件夹。并更改我们的 nginx 或 apache 代理配置,以便 nginx 或 apache 传递该文件夹中的文件。如果我们没有可能性,我们可以创建一个 asset api 端点来从所述文件夹传送文件。


0
投票

您可以使用“/tmp”文件夹临时保存无服务器功能中的文件,然后再将其上传到更永久的存储解决方案。部署后无法将文件写入其他位置。

有关更多信息,您可以查看无服务器函数中的 vercel 文件临时存储文档。


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.