Csharp/C#教程:Extjs Ajax文件下载请求C#MVC分享


Extjs Ajax文件下载请求C#MVC

我希望客户端在单击按钮时下载存储在我的数据库中的文件。 我发送这个ajax请求并从服务器端获取它。

EXTJS:

downloadFile: function (a, b, c) { var feed_id =this.getMyfeedwindow().down('form').getComponent('FeedId').text; Ext.Ajax.request({ url: '/Feed/Download', method: 'GET', params: { fileID: feed_id, //this.form.getComponent('file').value, }, failure: function (response) { alert('failed !'); }, success: function (response) { alert('success!'); }, }); }, 

然后用这个代码块满足请求。

C#:

  public void Download(string fileID){ Response.ContentType = "application/force-download"; Response.AddHeader("Content-Disposition", "attachment; Filename="Logo1.jpg""); Response.BinaryWrite(data); Response.End(); } 

当我用firebug检查网络时,似乎我的请求使用这些参数成功返回。

 Cache-Control private Content-Disposition attachment; filename="Logo1.jpg" Content-Type application/force-download Date Wed, 09 Jan 2013 12:51:54 GMT Server Microsoft-IIS/8.0 Transfer-Encoding chunked X-AspNet-Version 4.0.30319 X-AspNetMvc-Version 4.0 X-Powered-By ASP.NET X-SourceFiles =?UTF-8?B?RTpcVXRrdUNhblxQcm9qZWN0c1xURlNcQlRPTVxCVE9NXEZlZWRcRG93bmxvYWQ=?= 

虽然它返回成功,但下载无法启动。 我阅读了很多问题和文章,但大多数答案都说添加force-download header可以解决问题。 我想念哪一点? 谢谢。

要处理下载,您应该使用提供的帮助程序之一

大多数时候我使用的是System.Web.MVC.FileStreamResult 。 用它就好

 FileStreamResult result = new FileStreamResult(stream, contentType); result.FileDownloadName = filename; // name of the downloaded file 

根据您的编辑 更新 一些信息

您无法使用XHR请求开始下载。 但至少有两种方法可以做到:

经过一些搜索,我发现location.href做了同样的事情并打开了一个下载对话框。 应该将相同的标头添加到来自服务器的响应中。 但是,我仍然不知道为什么其他方法不起作用。

 var feed_id = this.getMyfeedwindow().down('form').getComponent('FeedId').text; location.href = '/Feed/Download?fileID=' + feed_id; 

这解决了我的问题。

上述就是C#学习教程:Extjs Ajax文件下载请求C#MVC分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/1013460.html

(0)
上一篇 2021年12月30日
下一篇 2021年12月30日

精彩推荐