#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
существует в пределах области видимости.