2017-03-13 62 views
0

我正在使用angular2與asp.net核心webapi。使用以下代碼發送文件信息。 IFormFile始終爲空。我在後期輸入和API方法參數中使用了相同的名稱,但仍然沒有運氣。請幫幫我。Angular2到Asp.net核心Webapi IFormFile爲空

FORMDATA

this.formData.append("file", f,f.name); 

元器件方法

public UploadFiles() { 
     console.log("Form Data:" + this.formData); 

     let saved: boolean = false; 
     this.claimsService 
      .UploadFiles(this.formData) 
      .subscribe(data => { 
       saved = data; 
      }, error => { 
       console.log(error) 
       swal(error); 

      }) 
    } 

服務方法

UploadFiles(data: FormData): Observable<boolean> { 
     return this.ExecuteFilePost("Upload/Upload", data); 
    } 

基本服務方法:

public ExecuteFilePost(action: string, data: FormData) { 
     let _body = data; 

     let headers = new Headers({ 'Content-Type': undefined}); 

     let url = this._baseUrl + action; 

     let requestoptions: RequestOptions = new RequestOptions({ 
      headers: headers, 
     }); 

     console.log('req url:' + url); 
     return this.http.post(url,_body,requestoptions) 
      .share() 
      .map((res: Response) => { 
       if (res.status < 200 || res.status >= 300) { 
        throw new Error('This request has failed ' + res.status); 
       } 
       else { 
        return res.json(); 
       } 
      }); 

    } 

的WebAPI方法

[HttpPost] 
     [ActionName("Upload")] 
     public async Task Upload(IFormFile file) 
     { 

      var uploads = Path.Combine(_environment.WebRootPath, "uploads"); 
      // foreach (var file in files) 
      // { 
       if (file.Length > 0) 
       { 
        using (var fileStream = new FileStream(Path.Combine(uploads, file.FileName), FileMode.Create)) 
        { 
         await file.CopyToAsync(fileStream); 
        } 
       } 
      // } 
     } 

鉻請求屏幕 enter image description here

+0

我能解決這個問題。我做了以下事情。 移除{ '內容 - 類型':未定義} 新增 '接受', '應用/ JSON' 而ConfigureServices-> services.AddCors(選項=> { options.AddPolicy( 「CorsPolicy」, 助洗劑=> () .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials()); }); Configure-> app.UseCors(「CorsPolicy」); –

回答

0

我知道後是舊的,但也許其他人。你可以做這樣的事情:

HTML:

<input #fileInput type="file" multiple /> 
<button (click)="addFile()">Add</button> 

組件:

@ViewChild("fileInput") fileInput; 

    addFile(): void { 
     let fi = this.fileInput.nativeElement; 
     if (fi.files) { 
      let fileToUpload = fi.files; 
      this.settingsService 
       .upload(fileToUpload) 
       .subscribe(res => { 
        console.log(res); 
       }); 
     } 
    } 

服務:

upload(files: any) { 
     let formData = new FormData(); 
     for (let i = 0; i < files.length; i++) { 
      formData.append("files", files[i]); 
     } 

     return this.http 
      .post(fileUploadApi, formData) 
      .map(response => this.extractData(response as Response)) 
      .catch(error => this.httpErrorHandlerService.responseError(error)); 
    } 

的Web API

[HttpPost] 
     [Route("Upload")] 
     public IActionResult UploadFiless([FromForm] IFormFileCollection files) 
     { 
      try 
      { 
       return this.Ok(); 
      } 
      catch (Exception) 
      { 
       return this.BadRequest(); 
      } 
     } 
相關問題