如何使用ASP.net Web API和Javascript下载二进制文件?
发布时间:2020-12-16 03:30:23 所属栏目:asp.Net 来源:网络整理
导读:我有一个Web API控制器,如下所示: using System;using System.Net;using System.Net.Http;using System.Net.Http.Headers;using System.Web.Http;using System.Threading.Tasks;using System.IO; namespace APIIntegration.Controllers { public class Test
我有一个Web API控制器,如下所示:
using System; using System.Net; using System.Net.Http; using System.Net.Http.Headers; using System.Web.Http; using System.Threading.Tasks; using System.IO; namespace APIIntegration.Controllers { public class TestController : ApiController { // http://localhost/api/test [HttpGet] public async Task<HttpResponseMessage> Get() { Stream stream = streamWith256Bytes; HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK); result.Content = new StreamContent(stream); result.Content.Headers.ContentLength = stream.Length; result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment"); result.Content.Headers.ContentDisposition.FileName = "foo.bin"; return result; } private static Stream streamWith256Bytes { get { MemoryStream stream = new MemoryStream(); for (int i = 0; i <256 ; i++) { stream.WriteByte(Convert.ToByte(i)); } stream.Position = 0; return stream; } } } } 简而言之,此控制器尝试将256字节文件下载到浏览器.首先,它似乎工作,但是当检查下载的文件时,大小是512字节而不是预期的256字节,并且不可打印的字符被删除. 如何修改此代码以便正确下载二进制数据? 编辑:我还应该提一下,我在这里看到了一个类似的问题:Problems with downloading pdf file from web api service,通过添加内容长度标题解决了问题,但这并没有解决这个问题. 编辑:我修改了上面的源代码,给出了一个完整的,如何重现的工作示例. 编辑:我发现当我键入地址栏中的地址时,上面的代码实际上正常工作,但是当使用Javascript启动下载时,这就是我遇到问题的地方. 解决方法
我找到了解决方案.在我的Javascript中,我使用Angular使用Angular $http服务启动文件下载.默认情况下,此服务将响应解释为文本.我不得不告诉Angular将响应解释为blob,并修复了所有内容.
我的工作代码如下所示: function download(downloadUrl) { $http({ url: downloadUrl,responseType: "blob" }) .then(function (response) { var blob = new Blob([response.data],{ type: "application/octet-stream" }); saveAs(blob,"foo.bin"); },function (response) { alert("error downloading file from " + downloadUrl); }); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 在ASP.Net 2.0应用程序中检查用户会话状态的状态和大小的最
- 通过添加HTTP Header实现上下文数据在WCF的自动传递
- asp.net – Cookiless Session是安全隐患吗?
- TempData知多少
- asp.net – App_Code中的类无法通过Global.asax.cs访问
- asp.net-mvc – 如何在Razor View中格式化lambda表达式中的
- asp.net-mvc – 使用ASP.NET MVC响应REQUEST_METHOD = HEAD
- asp.net-mvc – asp.net mvc禁用ajax缓存
- Asp.Net MVC 5 Framework(非核心)中的Angular 4服务器端渲染
- asp.net – ActionLink 404错误
推荐文章
站长推荐
- asp.net-mvc – 我们可以在Controller中创建静态
- asp.net – 请求验证 – 在SiteCore中如何以及为
- asp.net-mvc – 如何在asp.net mvc中持久化查询字
- asp.net-mvc – 如何在RouteTable MVC.Net中手动
- asp.net – 在WCF中将对象数组序列化为JSON以符合
- asp.net – 如何从搜索引擎中完全隐藏网站?
- asp.net-mvc – DevExpress MVC GridView – 如何
- asp.net – Silverlight 3工具未在Visual Studio
- asp.net-mvc – ASP.NET MVC:post-redirect-get
- asp.net-mvc – Web部署由于文件正在使用而失败
热点阅读