У меня есть файл, который работает нормально, однако я хотел бы передать объект JSON, содержащий другие данные, например, кто создал файл, имя файла и путь к файлу загружать. Каждый тип файла должен быть загружен в определенном месте, которое я получаю из базы данных. В настоящее время моя загрузка файла будет загружать все файлы в одно место. Если это невозможно, я могу передать URL-адрес пути загрузки только в заголовке?Передача URL-адреса или объекта JSON с загрузкой файла
HTML
<input name="file" type="file" (change)="onChange($event)" style="width:80%" [disabled]='showDeleteButton' />
компонент
onChange(event: any) {
var files = event.srcElement.files;
this.file = files[0];
this.fileName = this.file.name;
console.log('file name ' + this.fileName);
this._uploadService.makeFileRequest(this.baseURL + 'UploadFiles', [], files).subscribe(() => {
console.log('file name ' + this.fileName);
});
сервис
makeFileRequest(url: string, params: string[], files: File[]): Observable<any> {
return Observable.create((observer: Observer<number>) => {
let formData: FormData = new FormData(),
xhr: XMLHttpRequest = new XMLHttpRequest();
for (let i = 0; i < files.length; i++) {
formData.append("uploads[]", files[i], files[i].name);
}
xhr.onreadystatechange =() => {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
observer.next(JSON.parse(xhr.response));
observer.complete();
} else {
observer.error(xhr.response);
}
}
};
xhr.open('POST', url, true);
xhr.send(formData);
});
}
WebAPI
[HttpPost]
[Route("API/FileUpload/UploadFiles")]
public HttpResponseMessage UploadFiles()
{
var file = HttpContext.Current.Request.Files[0];
if (file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(System.Web.Hosting.HostingEnvironment.MapPath("~/upload/"), fileName);
// var path = Path.Combine(System.Web.Hosting.HostingEnvironment.MapPath("~/upload/1/1/"), fileName);
file.SaveAs(path);
var content = JsonConvert.SerializeObject(fileName, new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
});
var response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StringContent(content, Encoding.UTF8, "application/json");
return response;
}
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, "faild");
}
Я хотел бы передать этот объект
или, если есть в любом случае, чтобы пройти путь загрузки в заголовке вместо этого?