Экспресс-парсинг поста multipart/form-data в req.body

Я пытаюсь загрузить файл, используя объект jQuery Ajax + FormData, найденный в браузерах Chrome и Firefox. Код, который я использую для этого, следующий:

var formData = new FormData();
    formData.append('image', $scope.image.data);

     $.ajax({
       url: '/wines/'+id+'/image',
       type: 'POST',
       data: formData,
        processData:false,
        contentType:false
     }).done(function(){
       $location.path('/');
     });

Глядя на инструменты разработчика, я вижу, что запрос сформирован правильно, однако экспресс распознает содержимое внутри req.body вместо req.files. Вот изображение полезной нагрузки запроса:

Запрос полезной нагрузки

Экспресс конфиг:

app.configure(function(){
app.set('views', __dirname + '/app');
app.engine('.html', require('ejs').renderFile)
app.use(express.static(__dirname + '/app'));
app.use(express.bodyParser());
app.use(express.methodOverride());

app.use(app.router);
});

Что я делаю не так?? Большое спасибо.


person Pablo    schedule 15.02.2013    source источник


Ответы (1)


Потому что это не файл, а просто строка. Для AJAX файла с FormData вы должны передать объект File в FormData.append то, что вы передаете, является uri данных, который является просто строкой.

Файл в теле multipart/form-data выглядит примерно так

------WebKitFormBoundaryNBylbsEYlWSsq2lB
Content-Disposition: form-data; name="image"; filename="999.jpg"
Content-Type: image/jpeg

The file content here
------WebKitFormBoundaryNBylbsEYlWSsq2lB--
person Musa    schedule 15.02.2013
comment
Вы правы, я отправлял результат FileReader, когда мне нужно было отправить необработанный файловый объект - person Pablo; 15.02.2013