Отправка полей тела на сервер при использовании библиотеки angularjs - PullRequest
0 голосов
/ 22 октября 2019

Мой бэкэнд был изменен и теперь требует отправки поля вместе с файлом. Раньше этого было достаточно, чтобы просто загрузить файл.

Мой фронтенд использует с тех пор, как до этой библиотеки angularjs:

https://github.com/nervgh/angular-file-upload/wiki/Module-API

Я провел небольшое исследование и понял васследует инициировать саму библиотеку более или менее следующим образом:

var uploader = new FileUploader({
     url: 'mybackend',
     headers: { 'Content-Type': undefined }
});

А затем для добавления полей следует использовать «formdata». Поэтому я попытался сделать это:

uploader.onBeforeUploadItem = function (item) {
    item.formData['documentType'] = 'mydoctype';
};

Однако на стороне сервера я вижу, что поле было отправлено как поле заголовка. Не как поле тела. Учитывая, как бэкэнд был кодом (и уже работает с автотестами), мне действительно нужно имитировать автотест и в этом случае заставить библиотеку внешнего интерфейса вызывать бэкэнд, отправляя поле тела вместе с самим файлом.

Я мог быне найти никаких документов по этому поводу. Любая помощь будет действительно ценной.

**** EDITED *****

В тестах используется библиотека npm, которая называется supertest. Запрос выглядит следующим образом:

const request = supertest('mybackend')
    .post(`/myendpoint`)
    .field('documentType', "mytype")
    .attach('file', fileBuffer, {filename: 'testfile1.pdf', contentType: 'application/pdf'})
    .expect('Content-Type', /json/)
    .end(handleResponse({}, done));

Как видите, файл прикрепляется к вызову POST. Где вы также добавили поле (параметр POST). Если этого недостаточно, я могу попытаться выяснить полный запрос, отправленный на сервер при супер-вызове выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...