2017-02-16 79 views
3

Angular2我想上传文件并保存文件在服务器上的文件夹,但我不能得到HttpContext.Current.Request.Files,它始终为空。我的代码
-UploadService.tsAngular2文件上传与WebApi

postFileUpLoad(url: string, data: any): any { 
    let headers = new Headers(); 
    if (localStorage.getItem('localStorage') != null) { 
     headers.append('Content-Type', 'multipart/form-data') 
     headers.append('Authorization', "Bearer " + JSON.parse(localStorage.getItem('localStorage')).idToken); 
    } 
    this.slimLoadingBarService.startLoading(); 
    return this.http.post(url, data, { 
     headers: headers 
    }) 
     .toPromise() 
     .then(this.extractData) 
     .catch(this.handleError); 
} 

-upload文件组件

onChange(event) { 
let fileList: FileList = event.target.files; 
    if (fileList.length > 0) { 
     let file: File = fileList[0]; 
     let formData: FormData = new FormData(); 
     formData.append('uploadFile', file, file.name); 
     this.httpService.postFileUpLoad('http://localhost:3000/api/uploadFile', formData); 
    }} 


- HTML

<input type="file" id="btnUpload" value="Upload" name="FileUpLoad" (change)="onChange($event)" class="upload" /> 

- API服务上传

[HttpPost] 
    [Route("uploadFile")] 
    public HttpResponseMessage UploadJsonFile() 
    { 
     HttpResponseMessage response = new HttpResponseMessage(); 
     var abc = Request.Properties.Values; 
     var httpRequest = HttpContext.Current.Request; 
     if (httpRequest.Files.Count > 0) 
     { 
      foreach (string file in httpRequest.Files) 
      { 
       var postedFile = httpRequest.Files[file]; 
       var filePath = HttpContext.Current.Server.MapPath("~/UploadFile/" + postedFile.FileName); 
       postedFile.SaveAs(filePath); 
      } 
     } 
     return response; 
    } 

请帮助我,非常感谢!

+0

@爱情王子你试过我的回答吗?它工作吗? –

+0

不,现在工作:( –

回答

0

更改API方法如下图所示:

[HttpPost] 
[Route("uploadFile")] 
public HttpResponseMessage UploadJsonFile() 
{ 
    HttpResponseMessage response = new HttpResponseMessage(); 
    var abc = Request.Properties.Values; 
    var httpRequest = HttpContext.Current.Request; 
    var fileCount = httpRequest.Files.Count; 
    if (httpRequest.Files.Count > 0) 
    { 
     for (int i=0; i< fileCount ; i++) 
     { 
      var postedFile = httpRequest.Files[i]; 
      var filePath = HttpContext.Current.Server.MapPath("~/UploadFile/" + postedFile.FileName); 
      postedFile.SaveAs(filePath); 
     } 
    } 
    return response; 
} 

您将得到该文件中 “postedFile”。

2

您必须删除此行。

headers.append('Content-Type', 'multipart/form-data') 

然后它会工作。