使用Jquery Post使用Web API下载文件

赛德·阿赫塔尔(Syed Akhtar)

我有一个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中调用此方法以下载文件,以便弹出“保存文件”对话框。我正在使用tickout.js,在按钮的单击事件处理程序中,我调用了此WebAPI方法,并获得了流,但是我不知道如何将其保存到文件中。

Thewads

您可以通过修改将数据发送到webapi的方式来解决此问题。

在您的Javascript中,您可以创建一个隐藏的表单并将所需的数据附加到该表单中,然后提交。

示例代码显示在coffeescript中,但应易于阅读/转换:

downloadDocument: (fileUri, otherProp, successCallback) =>
    if $('#hidden-form').length > 0
        $('#hidden-form').remove()

    $('<form>').attr(
        method: 'POST',
        id: 'hidden-form',
        action: '/your/url/to/method'
    ).appendTo('body');

    $('<input>').attr({
        type: 'hidden',
        id: 'fileUri',
        name: 'fileUri',
        value: fileUri
    }).appendTo('#hidden-form')
    $('<input>').attr({
        type: 'hidden',
        id: 'otherProp',
        name: 'otherProp',
        value: otherProp
    }).appendTo('#hidden-form')

    $('#hidden-form').bind("submit", successCallback)
    $('#hidden-form').submit()

然后,我还将创建一个DTO对象,该对象在您的webAPI控制器中作为参数接收,而不是从请求正文中读取:

public DownloadDocumentDTO
{
    public string fileUri {get;set;}
    public object otherProp {get;set;}
}

[HttpPost] 
public HttpResponseMessage DownloadDocument(DownloadDocumentDTO _dto)
{
    ....
}

控制器方法中的代码应该没问题。应该注意的是,如果您试图传递更复杂的数据(由于未提及,因此不知道是否这样做),那么您将需要向隐藏的表单中添加更多的输入,它将无法传递对象向上。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用Jquery Post使用Web API下载文件

来自分类Dev

使用Amazon Android API下载文件

来自分类Dev

使用Amazon Android API下载文件

来自分类Dev

使用Play Web API下载文件(异步)

来自分类Dev

如何使用REST API从Parse.com下载文件?

来自分类Dev

使用Java下载文件,没有api,奇怪的错误

来自分类Dev

从Github资产API使用Meteor下载文件时出错

来自分类Dev

使用PHP的Google Drive API下载文件

来自分类Dev

如何使用Laravel从外部api响应源下载文件?

来自分类Dev

使用Restangular请求从REST API下载文件

来自分类Dev

从Github资产API使用Meteor下载文件时出错

来自分类Dev

使用 api 从谷歌云存储下载文件

来自分类Dev

github-api:访问/下载文件(不使用`getArchive`)

来自分类Dev

使用 ServiceStack Rest-API 下载文件

来自分类Dev

如何使用jQuery下载文件?

来自分类Dev

开始使用JQuery下载文件

来自分类Dev

使用 jQuery (GET) 下载文件的困难

来自分类Dev

使用WebClient POST查询并下载文件

来自分类Dev

使用WebClient POST查询并下载文件

来自分类Dev

在ASP.NET MVC 5控制器中使用POST从dotnet Core Web API下载文件

来自分类Dev

使用Web视图下载文件

来自分类Dev

使用cherrypy下载文件

来自分类Dev

使用AsyncTask下载文件

来自分类Dev

使用Django下载文件

来自分类Dev

使用webapi下载文件

来自分类Dev

使用ClosedXML下载文件

来自分类Dev

使用卷曲下载文件

来自分类Dev

使用AngularJS下载文件

来自分类Dev

使用FileSaver下载文件