WebApi:
[HttpGet]
public HttpResponseMessage GenExcel()
{
var rutaExcelTemp = @"C:\path_del_sitio_web\Xls\TasaMedia.xlsx";
var nombreArchivoGenerado = "TasaMedia_" + DateTime.Now.Day + "_" + DateTime.Now.Month + "_" + DateTime.Now.Year + "_" + DateTime.Now.Hour + DateTime.Now.Minute + DateTime.Now.Second + DateTime.Now.Millisecond + ".xlsx";//nombre del nuevo archivo
var reportStream = new StreamContent(File.Open(rutaExcelTemp, FileMode.Open, FileAccess.Read));
var result = Request.CreateResponse(HttpStatusCode.OK);
result.Content = reportStream;
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/force-download");
result.Content.Headers.Add("Access-Control-Expose-Headers", "Content-Disposition");
result.Content.Headers.ContentDisposition =
new ContentDispositionHeaderValue("attachment")
{
FileName = Path.GetFileName(nombreArchivoGenerado)
};
return result;
}
Angular:
import { Observable } from 'rxjs';
import { HttpClient } from "@angular/common/http";
return this.http.get('http://localhost' + url', {
responseType: 'blob', observe: 'response'
}).subscribe(res => {
let contentDisposition = res.headers.get('Content-Disposition');
var result = contentDisposition.split(';')[1].trim().split('=')[1];
let archivo = result.replace(/"/g, '');
console.log('start download:', res);
var url = window.URL.createObjectURL(res.body);
var a = document.createElement('a');
document.body.appendChild(a);
a.setAttribute('style', 'display: none');
a.href = url;
a.download = archivo; //res.filename;
a.click();
window.URL.revokeObjectURL(url);
a.remove(); // remove the element
}, error => {
console.log('download error:', JSON.stringify(error));
}, () => {
console.log('Completed file download.')
});
}