2017-02-17 1 views
0

У меня есть файл, который работает нормально, однако я хотел бы передать объект 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"); 
    } 

Я хотел бы передать этот объект

enter image description here

или, если есть в любом случае, чтобы пройти путь загрузки в заголовке вместо этого?

ответ

Смежные вопросы