TypeError:上传文件时无法读取 Node js 中未定义的属性“路径”

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

我是 Node js 新手。

我试图上传文件,它显示一些路径错误。下面是我的代码。

var http = require('http');
var formidable = require('formidable');
var fs = require('fs');

http.createServer(function (req, res) {
  if (req.url == '/fileupload') {
    var form = new formidable.IncomingForm();
    form.parse(req, function (err, fields, files) {
        console.log(files);
      var oldpath = files.filetoupload.path;
      var newpath = '/var/www/html/Node-Js/img/' + files.filetoupload.name;
      fs.rename(oldpath, newpath, function (err) {
        if (err) throw err;
        res.write('File uploaded and moved!');
        res.end();
      });
 });
  } else {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write('<form action="fileupload" method="post" enctype="multipart/form-data">');
    res.write('<input type="file" name="filetoupload"><br>');
    res.write('<input type="submit">');
    res.write('</form>');
    return res.end();
  }
}).listen(8080);

这里我已经安装了强大的模块。已经安装了。 我收到以下错误,请查看。

/var/www/html/Node-Js/file_upload.js:11
      var oldpath = files.filetoupload.path;
                                       ^

TypeError: Cannot read property 'path' of undefined
    at /var/www/html/Node-Js/file_upload.js:11:40
    at IncomingForm.<anonymous> (/var/www/html/Node-Js/node_modules/formidable/lib/incoming_form.js:107:9)
    at emitNone (events.js:106:13)
    at IncomingForm.emit (events.js:208:7)
    at IncomingForm._maybeEnd (/var/www/html/Node-Js/node_modules/formidable/lib/incoming_form.js:557:8)
    at Object.end (/var/www/html/Node-Js/node_modules/formidable/lib/incoming_form.js:247:12)
    at IncomingMessage.<anonymous> (/var/www/html/Node-Js/node_modules/formidable/lib/incoming_form.js:132:30)
    at emitNone (events.js:106:13)
    at IncomingMessage.emit (events.js:208:7)
    at endReadableNT (_stream_readable.js:1064:12)

javascript node.js formidable
5个回答
3
投票

您在 console.log(files) 中得到

null{}
是此特定错误背后的原因。
Files
即将为空,因此
files.filetoupload
将是未定义的,这就是找不到
files.filetoupload.path
的原因。我想说,请找出为什么
files
变为空。一旦您开始在文件中获取数据,此错误就会得到解决。


2
投票

我遇到了同样的问题,查看日志后我意识到该名称下不存在路径和名称,因此请尝试替换:

var oldpath = files.filetoupload.path;
var newpath = '/var/www/html/Node-Js/img/' + files.filetoupload.name;

与:

var oldpath = files.filetoupload.filepath;
var newpath = '/var/www/html/Node-Js/img/' + files.filetoupload.originalFilename;

这对我有用,所以我希望它有帮助


1
投票

使用文件[0]

var http = require('http');
var formidable = require('formidable');
var fs = require('fs');

http.createServer(function (req, res) {
  if (req.url == '/fileupload') {
    var form = new formidable.IncomingForm();
    form.parse(req, function (err, fields, files) {
        console.log(files);
      var oldpath = files[0].filetoupload.path;
      var newpath = '/var/www/html/Node-Js/img/' + files.filetoupload.name;
      fs.rename(oldpath, newpath, function (err) {
        if (err) throw err;
        res.write('File uploaded and moved!');
        res.end();
      });
 });
  } else {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write('<form action="fileupload" method="post" enctype="multipart/form-data">');
    res.write('<input type="file" name="filetoupload"><br>');
    res.write('<input type="submit">');
    res.write('</form>');
    return res.end();
  }
}).listen(8080);

1
投票

我遇到了同样的问题,仔细查看我的代码后,我发现我使用不同的名称来获取 server.js 中的文件,然后是我在 html 文件中提到的文件

我在 HTML 中命名了文件元素

name="发票" // 输入类型=文件

server.js 中使用

要上传的文件

因此,如果有人遇到类似问题,请查看您的代码,尤其是 HTML 元素的名称。


0
投票

使用旧路径 = files.filetoupload[0].filepath

© www.soinside.com 2019 - 2024. All rights reserved.