Veneomin
@Veneomin

Как загрузить файл в nodejs?

Есть форма:
<form id="photo-form" name="upload" enctype="multipart/form-data" method="post" action="/upload">
				Виберіть зображення, які бажаете загрузити.
			<input id="files-field" type="file" multiple="multiple" />
			<input type="submit">
			<a class="send-files button tiny small-4">Загрузити</a>
	</form>

Обработка отправки Js:
(function(){
	$('body').on('click', '.send-files', function() {

		var formData = new FormData(),
			items = $('#files-field')[0].files
			formData.append('file', items);

		$.ajax({
			type: "POST",
			url: '/upload',
			data: formData,
			processData: false,
			success: function(){
				//window.location.href = '/';
			}
		});
	})
}());

NodeJs:
upload.post('/', function(req, res) {

	var form = new formidable.IncomingForm();
		form.uploadDir ='..//public/images';
		form.keepExtensions = false;
		form.type = 'multipart/form-data';
		form.multiples = true;

		form.on('error', function(err) {
	        console.log(err);
	    });

		console.log(form);

		form.on('end', function(fields, files) {
			console.log('end')
		});

	    form.parse(req, function(err, fields, files) {
	      console.log(err, fields, files)
	    });

   		res.end();
	
});


Вывод консоли:

{ domain: null,
  _events: { error: [Function] },
  _maxListeners: 10,
  error: null,
  ended: false,
  maxFields: 1000,
  maxFieldsSize: 2097152,
  keepExtensions: false,
  uploadDir: '..//public/images',
  encoding: 'utf-8',
  headers: null,
  type: 'multipart/form-data',
  hash: false,
  multiples: true,
  bytesReceived: null,
  bytesExpected: null,
  _parser: null,
  _flushing: 0,
  _fieldsSize: 0,
  openedFiles: [] }
end
null {} {}


Примерно такая же ситуация с другими middleware для загрузки файлов - приходит пустой запрос.
  • Вопрос задан
  • 6105 просмотров
Пригласить эксперта
Ответы на вопрос 2
Возможно, хотя не уверен, нужно заменить строку в аргументе метода post
upload.post('/upload', function(req, res) {
Ответ написан
Комментировать
@cubooks
Web-developer
Добрый вечер! Думаю, что проблема в том, что back-end не получает корректные данные из формы.

openedFiles: []


То есть, либо AJAX отправляется не правильно, или форма задана не верно. Попробуйте задать форму с файлом с идентификатором name, а не id.

<input type="file" name="upload" multiple="multiple">
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы