Правильный способ использования connect-multiparty с express.js?

Я пытаюсь загрузить файлы на свой сервер и извлечь их из почтового запроса с помощью промежуточного программного обеспечения connect-multiparty. Однако, когда я получаю запрос на сервер, объекты req.files и req.body пусты (не нуль, но node-inspector показывает, что это Object, в которых ничего нет.

Вот код, с которым я работаю:

сервер.js:

var express = require( "express" );
var app = express();
var server = require( "http" ).Server( app );
var fs = require( "fs" );
var multipart = require('connect-multiparty');

app.use( express.static( "public" ) );
app.use( multipart() );

app.post( "/httpUpload", function( req, res ) {
    console.log( "Received post request" );
}

индекс.html:

<form action="/httpUpload" method="post" enctype="multipart/form-data">
  <input type="file" id="uploadFileInput">
  <div class="row">
    <div class="col-md-6">
      <input type="submit">
    </div>
  </div>
</form>

Я получил аналогичные результаты, пытаясь использовать multer, connect-busboy и body-parser. Мне бы понравилось, если бы это решение сработало для меня, но оно не сработало: http://howtonode.org/really-simple-file-uploads

Итак... единственная общая тема во всех моих неудачных попытках - это я. ;о) Любые идеи, что я делаю неправильно?


person Eric    schedule 02.10.2015    source источник


Ответы (2)


вот мой способ извлечения загруженных файлов:

var express = require('express');
var multiparty = require('connect-multiparty'),
    multipartyMiddleware = multiparty({ uploadDir: './imagesPath' });

var router = express.Router();

router.post('/', multipartyMiddleware, function(req, res) {
  console.log(req.body, req.files);
  var file = req.files.file;
  console.log(file.name);
  console.log(file.type);
  res.status(200).send('OK');
});

module.exports = router;

это сохранит загруженные файлы в папку imagesPath

person Med Tumy    schedule 17.01.2016
comment
Нужно ли удалять файл из загруженного каталога после его обработки или сохранения? - person Rohit Khatri; 22.09.2018
comment
Используя это, файл загружается до достижения функции обратного вызова. Я хочу загрузить файл после нескольких проверок типа/размера и т. д. Как мы можем этого добиться? - person Rahul Munjal; 15.05.2021

Ну... это не совсем ответ на мой вопрос, но когда я изменил свой код, чтобы удалить форму и отправить запрос на публикацию с помощью метода ajax jQuery, объект req.files содержал мои данные. (пожимает плечами) Вот код в моем js, который заставил его работать:

$.ajax( {
    url: "/httpUpload",
    type: "POST",
    processData: false, // important
    contentType: false, // important
    dataType : "json",
    data: formData
} );

Это сообщение указало мне правильный путь: Загрузка файла без формы

person Eric    schedule 02.10.2015
comment
Это связано с тем, что согласно README вам необходимо использовать многопарный объект Form() для использования форм: github. com/pillarjs/multiparty#usage - person sijpkes; 27.05.2017