Я настраиваю загрузчик для своего веб-приложения который состоит из 2 файловых элементов ввода, в которых первый входной файл получит изображение и сохранит его в переменной списка изображений а второй получит pdf и сохранит его в списке переменных pdf файлов.
подход, который я применил к этому, заключается в том, чтобы хранить файловые объекты в переменных, которые я назвал pdfStorage и imageStorage, поэтому они будут переданы в службу dotnet core api после заполнения необходимых полей в моей форме и нажатия кнопки подтверждения.
У меня не возникает проблем на стороне клиента при сохранении файловых объектов в переменную. однако, как только я отправляю эти значения в параметры службы, для этих полей всегда отображается значение null.
Я просмотрел Request.Form в основной службе dotnet и вижу, что он там есть. Я не понимаю, почему он не заполняется параметром ActionResult.
Вот код, который я разместил в основной службе dotnet:
Результат действия:
[HttpPost("SaveNewData"),DisableRequestSizeLimit]
[Consumes("multipart/form-data")]
public ActionResult SaveNewData([FromForm]MyModelUpload modelUpload) {
var modelUploaded = modelUpload;
return Ok();
}
Модель в параметре:
public class MyModelUpload {
public IFormFile[] imageFile { get; set; }
public string description {get;set;}
public IFormFile[] pdfFileList {get;set;}
public string uploadedBy { get; set; }
public string title { get; set; }
public DateTime? dateEnd {get; set;}
}
А вот тестовый код, который я использовал для отправки данных формы в angular:
SaveNewData(formGroupData) {
let submitData = new FormData();
let pdfFileArray = formGroupData.pdfStorage;
// UPLOAD'S DETAIL
submitData.append('title',formGroupData.title);
submitData.append('description',formGroupData.title);
submitData.append('uploadedBy',formGroupData.uploadedBy);
submitData.append('dateEnd',formGroupData.dateEnd);
// // FOR IMAGE FILE
let imageFileObject = <File>formGroupData.imageStorage[0];
console.info(pdfFileArray);
submitData.append('imageFile[]',imageFileObject,imageFileObject.name);
// // LIST OF PDF DOCS
for(let arrayIndex in pdfFileArray) {
submitData
.append(`pdfFileList[]`,pdfFileArray[arrayIndex]
,pdfFileArray[arrayIndex].name);
}
return this.http
.post(`http://localhost:5000/Upload/SaveNewData`,submitData);
}
Как мне отправить те файловые объекты, которые я сохранил в своих переменных хранилища?
Вы можете использовать forloop для добавления данных формы
@chrisbuttacavoli Я этого не делал. Я попробую, хотя и дам обратную связь после. Спасибо
@Prashant Pimpale уже добавил его в FormData ранее, но я все равно получаю тот же результат для этого
Можете показать ошибку?





Вы должны использовать это:
SaveNewData(formGroupData) {
let submitData = new FormData();
let pdfFileArray = formGroupData.pdfStorage;
// UPLOAD'S DETAIL
submitData.append('title',formGroupData.title);
submitData.append('description',formGroupData.title);
submitData.append('uploadedBy',formGroupData.uploadedBy);
submitData.append('dateEnd',formGroupData.dateEnd);
// // FOR IMAGE FILE
let imageFileObject = <File>formGroupData.imageStorage[0];
console.info(pdfFileArray);
submitData.append('imageFile',imageFileObject);
// // LIST OF PDF DOCS
for (let i = 0; i < pdfFileArray.length; i++) {
submitData.append("pdfFileList",pdfFileArray[i]);
}
return this.http
.post(`http://localhost:5000/Upload/SaveNewData`,submitData);
}
Я тоже попробую. Спасибо
Вы пытались добавить в запрос заголовок Multipart/formdata? Также может быть полезно проверить сетевой запрос в меню отладчика Chrome (вкладка сети).