Файлы представляют собой двоичные данные, поля формы обычно представляют собой текстовые файлы json. Чтобы они оба были в одном сообщении, вам нужно преобразовать одну из ваших данных в другую. Я сделал это, преобразовав файл в строку base64, а затем добавив его в обычные данные json. Очевидно, что вам нужно преобразовать строку base64 обратно в файл, но большинство сред (например, C #) могут сделать это из коробки.
Вот некоторый код, чтобы показать вам, как я это сделал:
HTML (это кнопка файла, вы должны использовать ее, чтобы ваш браузер позволял вам выбирать файл из файловой системы):
<input name="imageUrl" type="file" [accept]="filePattern" multiple=""
(change)="handleInputChange($event)" />
.ts:
handleInputChange(e) {
const file = e.dataTransfer ? e.dataTransfer.files[0] : e.target.files[0];
const reader = new FileReader();
const fileDto: Partial<IFileSaveDto> = {
// your other data here
title: 'what ever here',
fileAsBase64: null
};
reader.onload = (ev: ProgressEvent) => {
fileDto.fileAsBase64 = reader.result;
};
reader.readAsDataURL(file);
}
Недостаток этого подхода заключается в том, что base64 генерирует некоторые накладные расходы. Если вы загружаете очень большие или много файлов, это не очень хороший подход.
Вот полный объясненный пример: https://nehalist.io/uploading-files-in-angular2/