ошибка загрузки изображения с использованием узла-грозный

#javascript #node.js #formidable

#javascript #node.js #грозный

Вопрос:

Я изучал «Книгу для начинающих узлов» и выполнял практику в книге, практика заключается в представлении изображения, которое было загружено пользователем. это пример, написанный с node-formidable помощью кода, как показано ниже:

 var formidable = require('formidable'),
http = require('http'),
util = require('util');

http.createServer(function(req, res) {
  if (req.url == '/upload' amp;amp; req.method.toLowerCase() == 'post') {
    // parse a file upload
    var form = new formidable.IncomingForm();
    form.parse(req, function(err, fields, files) {
      res.writeHead(200, {'content-type': 'text/plain'});
      res.write('received upload:nn');
      res.end(util.inspect({fields: fields, files: files}));
    });
    return;
  }

  // show a file upload form
  res.writeHead(200, {'content-type': 'text/html'});
  res.end(
    '<form action="/upload" enctype="multipart/form-data" ' 
    'method="post">' 
    '<input type="text" name="title"><br>' 
    '<input type="file" name="upload" multiple="multiple"><br>' 
    '<input type="submit" value="Upload">' 
    '</form>'
  );
}).listen(8888);
  

Я запускаю его с node filename.js помощью, затем я открываю свой браузер, расположенный в http://localhost:8888/upload , происходит что-то, как показано ниже:

введите описание изображения здесь

Я ввожу имя и выбираю файл, затем он выглядит следующим образом:

введите описание изображения здесь

Я нажимаю upload кнопку, ответ, как показано ниже:

 received upload:

{ fields: { title: 'Hello Wolrd' },
  files: 
   { upload: 
      File {
        domain: null,
        _events: {},
        _eventsCount: 0,
        _maxListeners: undefined,
        size: 37417,
        path: '/tmp/upload_a306115e1e630a0c548b6d820fe803cb',
        name: 'myfile_icon_file_4.png',
        type: 'image/png',
        hash: null,
        lastModifiedDate: 2016-10-11T03:52:41.052Z,
        _writeStream: [Object] } } }
  

как получить свойство path ? почему File там создается слово?

Комментарии:

1. Это внутреннее представление formidable библиотеки. Экземпляр File . Вы можете получить доступ к пути через: files.upload.path

2. Я пытался, но приходит ошибка: TypeError: Cannot read property 'path' of undefined , как?

Ответ №1:

Свойство path доступно для File объекта, который грозный определяет в своем коде. Как написано в вашем примере, ваша form.parse функция выдает вам карту File вызываемых объектов files (см. Рисунок). Поэтому, если вы хотите получить path значение для файла, который вы только что загрузили, вы должны сделать следующее (используя ключ upload , поскольку это то, что ваш html input -код) name :

var pathToFile = files['upload'].path;

Помните, что это будет доступно только на стороне сервера с тем, как написан ваш пример, поэтому, чтобы получить такой путь, вы должны поместить эту строку кода в свою form.parse функцию.

Распечатка, которую вы предоставляете в своем примере, взята из ответа, который получает клиент. То util.inspect , что вы используете для форматирования своего ответа, явно преобразует объекты fields and files в строковые представления для целей отладки / проверки, поэтому вы не можете получить к ним доступ как к переменной на стороне клиента. Если вы используете строку, которую я написал выше, или предложенное понятие строки, оно будет доступно path до тех пор, пока оно находится внутри вашей form.parse функции, где files существует в пределах области видимости.