manish.communityhub Ответов: 1

Как экспортировать в excel в angular и web api с помощью npm filesaver


Я хочу, чтобы экспортировать в Excel в угловой и веб-API с помощью npm filesaver

В консоли я получаю сообщение об ошибке :
Тело запроса не является ни большим двоичным объектом, ни буфером массива

Вот мой код

Веб-Api :
public HttpResponseMessage GetExcelData()
        {

            try
            {
                JobAssignment j = new JobAssignment();
              string filePath = j.GetExcelData();

                HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
                var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read);
                result.Content = new StreamContent(stream);
                result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment") { FileName = Path.GetFileName(filePath) };
               // result.Content.Headers.ContentLength = stream.Length;
                result.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/octet-stream");

                return result;
            }
            catch (Exception ex)
            {
                HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.InternalServerError);
                return result;
            }
        }



Компонент :

GetExcelData() {
  this.loaderService.GetExcelData()
    .subscribe(
    blob => {
      importedSaveAs(blob, "file1");
    },
    error => {
      this.errorMessage = <any>error
    });
}


обслуживание :

 GetExcelData(): Observable<Blob> {
let headers = new Headers({ 'Content-Type': 'application/json' });
   let options = new RequestOptions({ headers: headers, responseType: ResponseContentType.Blob });
     let bodyString = {};
   return this.http.get(this.rootUrl + 'GetExcelData',{responseType: ResponseContentType.Blob})
     .map(res => res.blob())
     .catch(this.handleError);
 }


Что я уже пробовал:

Я изменился
result.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/vnd.ms-excel");


Но это не работает.
Пожалуйста, скажите мне, где я ошибаюсь.

1 Ответов

Рейтинг:
2

manish.communityhub

Хорошо, я получил решение, очень просто мы можем это сделать.


Веб-Api

public void GetExcelData()
{

    string sFileName = System.IO.Path.GetRandomFileName();
    string sGenName = "Friendly.xls";
    System.IO.FileStream fs = null;
    fs = System.IO.File.Open(HttpContext.Current.Server.MapPath("~/TextFiles/StudentWiseRegistrationReport__14082017_134859.xls"), System.IO.FileMode.Open);
    byte[] btFile = new byte[fs.Length];
    fs.Read(btFile, 0, Convert.ToInt32(fs.Length));
    fs.Close();
    HttpContext.Current.Response.AddHeader("Content-disposition", "attachment; filename=" + sGenName);
    HttpContext.Current.Response.ContentType = "application/octet-stream";
    HttpContext.Current.Response.BinaryWrite(btFile);
    HttpContext.Current.Response.End();
}



И В Компоненте:

window.location.href='http://localhost:1036/api/Employee/GetExcelData';


Таким образом, можно загрузить лист Excel или текстовый файл.