Nodejs请教一下 以下错误怎么去解决呢?

Nodejs请教一下 以下错误怎么去解决呢?

错误信息 { [Error: EISDIR, open ‘/Volumes/mac/nodeProject/demo1/public/images/’] errno: 28, code: ‘EISDIR’, path: ‘/Volumes/mac/nodeProject/demo1/public/images/’ }

我的代码

var target_path = __dirname +’/public/images/’;

fs.readFile(req.files.Imgfile.path, function (err, data) {
                     console.log(target_path);
    fs.writeFile(target_path, data, function (err) {
        console.log(err);
        res.redirect("back");
        res.send("ok");
    });
});

4 回复

根据你提供的错误信息和代码片段,问题出在 fs.writeFile 方法的使用上。错误信息 { [Error: EISDIR, open '/Volumes/mac/nodeProject/demo1/public/images/'] errno: 28, code: 'EISDIR', path: '/Volumes/mac/nodeProject/demo1/public/images/' } 表明你尝试写入的目标路径是一个目录而不是文件。

解决方案

你需要确保目标路径是一个有效的文件路径,而不是一个目录。以下是修改后的代码示例:

var target_path = __dirname + '/public/images/image.jpg'; // 指定文件名

fs.readFile(req.files.Imgfile.path, function (err, data) {
    if (err) {
        console.error('Error reading file:', err);
        return;
    }

    fs.writeFile(target_path, data, function (err) {
        if (err) {
            console.error('Error writing file:', err);
            res.redirect("back");
            res.send("Error saving image.");
        } else {
            console.log('File saved successfully.');
            res.redirect("back");
            res.send("Image saved successfully.");
        }
    });
});

详细解释

  1. 指定文件名

    • 修改 target_path 变量以包含具体的文件名(例如 image.jpg)。这确保了你正在尝试写入的是一个文件而不是一个目录。
  2. 错误处理

    • 在读取和写入文件时添加错误处理逻辑。这样可以更清晰地了解哪个步骤出了问题,并提供适当的反馈给客户端。
  3. 响应处理

    • 如果文件写入成功,则重定向并发送成功的消息;如果发生错误,则重定向并发送错误消息。

通过这些更改,你可以避免 EISDIR 错误,并确保文件能够正确地被保存到指定的路径中。


fs.writeFile(filename, data, [options], callback) 是filename吧。。 var target_path = __dirname +’/public/images/yourimage.jpg’;

多谢,还有个问题 req.files.Imgfile.path 临时位置 有权限删除吗? 如果没多久回自动清理到

根据你提供的错误信息 { [Error: EISDIR, open ‘/Volumes/mac/nodeProject/demo1/public/images/’] ... },错误 EISDIR 表示你尝试写入一个目录而不是一个文件。你的目标路径 target_path 指向的是一个目录 /Volumes/mac/nodeProject/demo1/public/images/,而 fs.writeFile() 需要一个文件路径作为其第二个参数。

你需要指定文件名来写入具体的文件,而不仅仅是目录。例如,你可以使用上传文件的名称或生成一个唯一文件名。

示例代码修正

假设你有一个文件名为 filename.ext,你可以这样修改代码:

var target_path = __dirname + '/public/images/';
var newFileName = req.files.Imgfile.name; // 获取上传文件的名称
var finalPath = target_path + newFileName;

fs.readFile(req.files.Imgfile.path, function (err, data) {
    if (err) return console.error(err);

    fs.writeFile(finalPath, data, function (err) {
        if (err) {
            console.error(err);
            res.redirect("back");
            res.send("文件保存失败");
        } else {
            console.log('文件保存成功');
            res.redirect("back");
            res.send("ok");
        }
    });
});

在这个例子中,我们从 req.files.Imgfile 中提取了上传文件的名称,并将其附加到目标路径,形成一个完整的文件路径。这样 fs.writeFile 就可以正确地将数据写入到指定的文件中。

如果 req.files.Imgfile.name 为空或没有提供文件名,你需要确保它有默认值或使用其他逻辑来命名文件。

回到顶部