Я хочу загрузить файл при отправке формы, но он не публикуется в веб-API.
И сохранить файл по локальному физическому пути с помощью веб-API.
Здесь я пытаюсьотправить файл, используя FormData, и попытаться получить к нему доступ в API-вызове, используя HttpContext.Current.Request.Files, но его значение равно 0.
Html:
<form [formGroup]="employeeForm" (ngSubmit)="save()" #formDir="ngForm" novalidate style="position:relative;" enctype="multipart/form-data">
<div>
<input class="form-control" type="text" formControlName="Name">
<input type="file" id="FileUploader" (change)="onFileChange($event)" #fileInput accept=".pdf,.doc,.docx,.png">
<button type="button" class="btn btn-sm btn-default" (click)="clearFile()">clear file</button>
</div>
</form>
Компонент:
myFiles: string[] = [];
form: FormGroup;
loading: boolean = false;
@ViewChild('fileInput') fileInput: ElementRef;
onFileChange(e) {
for (var i = 0; i < e.target.files.length; i++) {
this.myFiles.push(e.target.files[i]);
}
}
save() {
const frmData = new FormData();
for (var i = 0; i < this.myFiles.length; i++) {
frmData.append("fileUpload", this.myFiles[i]);
}
this._employeeService.saveEmployee(this.employeeForm.value, frmData)
.subscribe((data) => {
this._router.navigate(['/fetch-employee']);
}, error => this.errorMessage = error)
}
Сервис:
saveEmployee(employee, myFile): Observable<any> {
return this._http.post(this.myAppUrl + 'api/Employee/Create', employee, myFile);
}
Веб-API:
public int Create([FromBody] TblEmployee employee)
{
System.Web.HttpFileCollection hfc = System.Web.HttpContext.Current.Request.Files;
// CHECK THE FILE COUNT.
for (int iCnt = 0; iCnt <= hfc.Count - 1; iCnt++)
{
System.Web.HttpPostedFile hpf = hfc[iCnt];
if (hpf.ContentLength > 0)
{
// CHECK IF THE SELECTED FILE(S) ALREADY EXISTS IN FOLDER. (AVOID DUPLICATE)
if (!File.Exists(sPath + Path.GetFileName(hpf.FileName)))
{
// SAVE THE FILES IN THE FOLDER.
hpf.SaveAs(sPath + Path.GetFileName(hpf.FileName));
iUploadedCnt = iUploadedCnt + 1;
}
}
}
return objemployee.AddEmployee(employee, myFile);
}
public partial class TblEmployee
{
public int EmployeeId { get; set; }
public string Name { get; set; }
}
Я перехожу по этой ссылке.