0

我正在使用 expressjs 作为中间件在节点服务器上创建一个简单的文件上传器。到目前为止,服务器端看起来像:

app.post('/upload', function(req, res) {
    console.log(req.files);

    //Handle the file
    fs.readFile(req.files.imageUploader.path, function(err, data) {
        var newPath = __dirname;
        console.log(newPath);
        console.log(data);
        fs.writeFile(newPath, data, function(err) {
            console.log(err);
            res.send("AOK");
        });
    });
});

现在,日志语句__dirname是我的源目录,正如预期的那样 (C:\Development\GitHub\ExpressFileUpload),但是上传时发生错误:

{ [Error: EISDIR, open 'C:\Development\GitHub\ExpressFileUpload']
errno: 28,
code: 'EISDIR',
path: 'C:\\Development\\GitHub\\ExpressFileUpload' }

我已经尝试将其更改为newPath但没有更改,不同的错误,但仍然是错误。这与错误中的双精度有关吗?我在这里错过了一些简单的东西吗?感谢您的帮助,如果需要更多信息,请告诉我。/./\\path

4

1 回答 1

5

__dirname全局对象是一个目录,而不是一个文件。因此,您无法打开它进行编写,这是fs.writeFile()您尝试在脚本中执行的操作,因此您获得EISDIR. 假设您希望使用与上传文件相同的名称写入文件,您可以执行以下操作:

var file = req.files.imageUploader;
fs.readFile(file.path, function(err, data) {
  var path = __dirname + '/' + file.name;
  fs.writeFile(path, data, function(err) {
  });
});
于 2013-11-04T02:42:11.193 回答