c# - 使用 Jquery Post 通过 Web API 下载文件

标签 c# jquery asp.net knockout.js asp.net-web-api2

我有一个返回文件流的 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/

相关文章:

jquery - Kendo Dropdownlist 未更新第一条记录上的 Kendo Grid 数据源?

c# - 如何根据tfs项目构建号设置AssemblyInfo.cs?

javascript - 每个 tr 的第一个 td 值

jquery - Raphael Freetransform 切换显示/隐藏句柄,对象位于前面,并且对象可以删除

c# - 在 C# 中这两种方法中定义属性有什么区别?

c# - 如何计算二维数组中唯一组合的总和

javascript - __doPostBack 函数是什么意思,什么时候使用?

asp.net - 从子页面刷新父页面

c# - 非序列化属性创建错误

C# WPF - 如何在 ListView 中拥有复选框?