Angular2 download excel file from Web API, file is corrupt

前端 未结 4 687
猫巷女王i
猫巷女王i 2020-12-20 03:05

I am trying to download a file that I created with ClosedXML. I have verified that the file is not corrupt but, for some reason, it works just with Angular1, not Angular2.

4条回答
  •  粉色の甜心
    2020-12-20 03:25

    Latest solution Try If using Angular 5:
    
    ///angular side
    
    //header
    let expheaders = new Headers({ 'Content-Type': 'application/json', 'Accept': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
    let options = new RequestOptions({ headers: expheaders, responseType: ResponseContentType.Blob });
    
    
    this.http.post(this.modeleffectiveperiodserviceurl+"ExportToXlsx",JSON.stringify({
                               modeleffectiveperioddetails:model,
                               colheader:columns
                               }),options)
                               .subscribe(data => { 
                                 var blob = new Blob([data.blob()], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" });
                                 var url= window.URL.createObjectURL(blob);
                                 window.open(url);                   
                              });
    
    
    
    //////////server side
    
    
      byte[] bytes = this._exportmanager.GetExcelFromServer(modeleffectivepc, colheader);
                HttpResponseMessage httpResponseMessage = new HttpResponseMessage();
                httpResponseMessage.Content = new ByteArrayContent(bytes.ToArray());
                httpResponseMessage.Content.Headers.Add("x-filename", fileName);
                httpResponseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
                httpResponseMessage.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
                httpResponseMessage.Content.Headers.ContentDisposition.FileName = fileName;
                httpResponseMessage.StatusCode = HttpStatusCode.OK;
                return httpResponseMessage;
    
    please tell if any problem
    

提交回复
热议问题