2016-10-11 1 views
0

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

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

http.createServer(function(req, res) { 
    if (req.url == '/upload' && 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:\n\n'); 
     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, приходит что-то, как показано ниже:

enter image description here

Я ввести имя и выбрать файл, то речь идет, как показано ниже:

enter image description here

я нажимаю кнопку 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?

+0

Это внутреннее представление библиотеки 'грозная'. Экземпляр «Файл». Вы можете получить доступ к пути через: 'files.upload.path' – notion

+0

Я пробовал, но приходит ошибка:' TypeError: Не удается прочитать свойство 'путь' неопределенного', как? – Rico

ответ

0

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

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

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

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

Смежные вопросы