我有一个返回文件流的 Web Api 函数
[HttpPost]
public HttpResponseMessage DownloadDocument([FromBody] parameters)
{
try
{
var stream = FileHelper.GetFilesStream(fileUrl);
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK) { Content = new StreamContent(stream) };
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
result.Content.Headers.ContentDisposition.FileName = fileName;
return result;
}
catch (Exception)
{
return Request.CreateErrorResponse(HttpStatusCode.NotFound, "File Not Found");
}
}
如何在 Jquery Ajax 中调用此方法来下载文件,以便弹出保存文件对话框。我正在使用 Knockout.js,在按钮的单击事件处理程序中,我调用此 WebAPI 方法并获取流,但我不知道如何将其保存到文件中。
最佳答案
您无法通过 ajax 调用下载文件。您将需要使用获取请求来下载文件。
您可以做的是使用上面的ajax post,但将文件保存在数据库中,然后返回带有文档ID或下载文档的URL的json。然后,您可以添加一个隐藏的 iframe,它将下载该文档。
看看这个答案,它展示了如何做到这一点:https://stackoverflow.com/a/16086443/2326610
关于c# - 使用 Jquery Post 通过 Web API 下载文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24186495/