我正在尝试发送一个9MB的.xls
文件作为web api控制器方法的响应。用户将单击页面上的按钮,这将通过浏览器触发下载。
这是我到目前为止得到的,但它不工作,但它也不会抛出任何异常。
[AcceptVerbs("GET")]
public HttpResponseMessage ExportXls()
{
try
{
byte[] excelData = m_toolsService.ExportToExcelFile();
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
var stream = new MemoryStream(excelData);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = "Data.xls"
};
return result;
}
catch (Exception ex)
{
m_logger.ErrorException("Exception exporting as excel file: ", ex);
return Request.CreateResponse(HttpStatusCode.InternalServerError);
}
}
下面是通过单击界面中的按钮来调用coffeescript/javascript jquery ajax。
$.ajax(
url: route
dataType: 'json'
type: 'GET'
success: successCallback
error: errorCallback
)
现在我想起来,也许dataType是错的,不应该是json…
发布于 2013-02-12 21:37:03
我不得不做一些小改动才能让它正常工作。
首先:将方法更改为post
[AcceptVerbs("POST")]
第二:从使用jQuery ajax库改为使用隐藏表单,下面是我的服务函数,用于执行隐藏表单并提交它。
exportExcel: (successCallback) =>
if $('#hidden-excel-form').length < 1
$('<form>').attr(
method: 'POST',
id: 'hidden-excel-form',
action: 'api/tools/exportXls'
).appendTo('body');
$('#hidden-excel-form').bind("submit", successCallback)
$('#hidden-excel-form').submit()
希望有更好的方法来做到这一点,但就目前而言,它正在工作并很好地下载了excel文件。
发布于 2016-10-25 22:20:27
也可以作为HTTP GET方法使用,但不要使用$ajax,而要使用window.open(url);
C#代码:
[HttpGet]
[Route("report/{scheduleId:int}")]
public HttpResponseMessage DownloadReport(int scheduleId)
{
var reportStream = GenerateExcelReport(scheduleId);
var result = Request.CreateResponse(HttpStatusCode.OK);
result.Content = new StreamContent(reportStream);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = "Schedule Report.xlsx"
};
return result;
}
JS代码:
downloadScheduleReport: function (scheduleId) {
var url = baseUrl + 'api/Tracker/report/' + scheduleId;
window.open(url);
}
发布于 2018-01-02 15:16:59
我也遇到过同样的问题。通过以下方式解决了问题:
window.open(url)
https://stackoverflow.com/questions/14831860
复制相似问题