Похоже, вы не отправляете файлы своему компоненту. Так что попробуйте написать так:
<input #file type="file" name="file" id="file" (click)="handleFileInput(file.files)" />
Позвольте мне показать пример, как можно загружать файлы.
upload.component. html:
<input type="file" #file placeholder="Choose file" (change)="uploadFile(file.files)"
accept="image/x-png,image/gif,image/jpeg" multiple>
upload.component.ts :
public uploadFile = (files) => {
if (files.length === 0) {
return;
}
const fileToUpload = files[0] as File;
const formData = new FormData();
formData.append('file', fileToUpload, fileToUpload.name);
this.uploadService.uploadFile(formData)
.subscribe(event => {
if (event.type === HttpEventType.UploadProgress) {
this.progress = Math.round(100 * event.loaded / event.total);
} else if (event.type === HttpEventType.Response) {
this.message = 'Upload success.';
this.onUploadFinished.emit({ dbPath: event.body.dbPath});
}
});
}
Фактический метод обслуживания :
uploadFile(file: FormData): Observable<any> {
return this.http.post(`${environment.baseApi}Upload`,
file, {reportProgress: true, observe: 'events'})
.pipe(map(v => v));
}
ASP. NET Основной контроллер :
[HttpPost]
public IActionResult Upload([FromForm] FileDto fileDto)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (fileDto.File != null)
{
return Ok(new { dbPath = _uploadFileService.UploadFile(fileDto.File ) });
}
return BadRequest();
}
и FileDto.cs
:
using Microsoft.AspNetCore.Http;
using System;
using System.Collections.Generic;
using System.Text;
namespace eshop.Persistence.Core.Dtos
{
public class FileDto
{
public IFormFile File { get; set; }
public string FolderPath { get; set; }
public string FileName { get; set; }
}
}