Мой бэкэнд был изменен и теперь требует отправки поля вместе с файлом. Раньше этого было достаточно, чтобы просто загрузить файл.
Мой фронтенд использует с тех пор, как до этой библиотеки 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). Если этого недостаточно, я могу попытаться выяснить полный запрос, отправленный на сервер при супер-вызове выше.