Safari添加.html使用epplus jquery.fileDownload.js下载xlsx

我正在使用MVC c#代码生成一个excel文件,然后下载,我使用EPPLUS,一切工作正常,除了在Mac上的Safari浏览器,当我尝试创build文件时,它是下载,最后添加.html例如,file.xlsx.html我不知道如何解决这个问题。

$.fileDownload(url, { httpMethod: 'POST', data: dtColumns, successCallback: function() { //code }, failCallback: function() { //code } }); 

公共streamExportDataset(IEnumerable数据集,IList columnsToExport,string模板){/ /分组工作的匿名types,所以我们可以分组导出到自己的表var groupings = dataset.GroupBy(i => i.GetType());

  using (var package = new ExcelPackage(new FileInfo(GetTemplateFilePath(template)), true)) { var ws = package.Workbook.Worksheets[1]; if (groupings.Any()) { // add each "anon type matched grouping" foreach (var grouping in groupings) { // because of EPP inheritance bug of T, we can just use dataTable var dataTable = new DataTable(grouping.Key.Name); var properties = grouping.Key.GetProperties(); // Get anon type Properties var columns = columnsToExport.OrderBy(x => x.Position); foreach (var property in columns.Where(column => column.IsVisible).SelectMany(column => properties.Where(property => property.Name.Equals(column.Name)))) { dataTable.Columns.Add(property.Name); } foreach (var item in grouping.ToList()) { var dataRow = dataTable.NewRow(); foreach (var p in columns.Where(column => column.IsVisible).SelectMany(column => properties.Where(property => property.Name.Equals(column.Name)))) { dataRow[p.Name] = p.GetValue(item); } dataTable.Rows.Add(dataRow); } ws.Cells[1, 1].LoadFromDataTable(dataTable, PrintHeaders: true); ws.Cells.AutoFitColumns(); } } else { // This case is when there is no data on the table to load the Excel so we create an empty sheet but we add the headers var datasetStructure = dataset.GetType().GetGenericArguments()[0]; // because of EPP inheritance bug of T, we can just use dataTable var dataTable = new DataTable(datasetStructure.Name); var properties = datasetStructure.GetProperties(); // Get anon type Properties foreach (var property in properties) { dataTable.Columns.Add(property.Name); } ws.Cells[1, 1].LoadFromDataTable(dataTable, PrintHeaders: true); ws.Cells.AutoFitColumns(); } var fileStream = new MemoryStream(); package.SaveAs(fileStream); return fileStream; } } 

在控制器上:

返回新的CustomFileResult(fileStream,fileName);

公共类CustomFileResult:IHttpActionResult {私人只读stream_fileContent; 私人只读string_fileName;

  public CustomFileResult(Stream fileContent, string fileName) { _fileContent = fileContent; _fileName = fileName; } public Task<HttpResponseMessage> ExecuteAsync(CancellationToken cancellationToken) { return Task.Run(() => { var response = new HttpResponseMessage(); var fileDownloadFail = false; if (_fileContent == null || _fileContent.Length == 0) { response.StatusCode = HttpStatusCode.InternalServerError; fileDownloadFail = true; } else { response.StatusCode = HttpStatusCode.OK; _fileContent.Position = 0; response.Content = new StreamContent(_fileContent); response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = _fileName, }; } //Required for plugin jquery.fileDownload.js var cookie = new CookieHeaderValue("fileDownload", "true") { Path = "/" }; response.Headers.AddCookies(new CookieHeaderValue[] { cookie }); return response; }, cancellationToken); } } 

解决方法是添加contentType来优化响应,默认是文本/ HTML,所以Safari浏览器的理由不理解,文件响应是优秀的,所以添加这一行:

response.Content.Headers.ContentType = new MediaTypeHeaderValue(“application / vnd.ms-excel”);

问题解决了。