从JavaScript调用web api并返回文档
我有一个Angular应用程序,我想调用我的API并返回一个文档供下载。文档作为图像数据类型存储在MSSQL数据库中 我使用以下响应消息代码成功地使用了API从JavaScript调用web api并返回文档,javascript,angularjs,bytearray,Javascript,Angularjs,Bytearray,我有一个Angular应用程序,我想调用我的API并返回一个文档供下载。文档作为图像数据类型存储在MSSQL数据库中 我使用以下响应消息代码成功地使用了API var ms = new MemoryStream(_document.Document); var response = new HttpResponseMessage(HttpStatusCode.OK) {Content = new StreamContent(ms)}; response.Conte
var ms = new MemoryStream(_document.Document);
var response = new HttpResponseMessage(HttpStatusCode.OK) {Content = new StreamContent(ms)};
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.ms-word");
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = string.Format("{0}.{1}", "testdocument, ".docx");
return response;
如果在chrome中调用myapi/Document,它将只下载文档
但是我想在我的angular应用程序中有一个链接并触发这个下载动作
到目前为止,我已经通过创建一个“a”标记并使用以下代码强制执行一个click事件,成功地使它工作
var a = window.document.createElement('a');
a.href = SettingsService.getAPIURL() + "Document" + '/';
a.download = "test";
// Append anchor to body.
document.body.appendChild(a);
a.click();
// Remove anchor from body
document.body.removeChild(a);
唯一的问题是我不能为我的安全令牌添加任何头
我尝试过但未成功的另一种方法是下面的$http请求
result.success(function (data, status, headers, config) {
var arr = data.Document; // this is the byte[]
var byteArray = new Uint8Array(arr);
var a = window.document.createElement('a');
a.href = window.URL.createObjectURL(new Blob([byteArray], { type: data.MediaHeaderValue })); // mediaheadervalue eg "application/msword"
a.download = "test.docx";
// Append anchor to body.
document.body.appendChild(a);
a.click();
});
不难研究
ajax下载
或angular$http下载
是的,我尝试过这些方法,但我遇到了一个错误。“很抱歉,我们无法打开name.docx,因为我们发现其内容有问题”然后您需要做的是显示您尝试了什么。。。人们将帮助解决这个问题。而不是要求人们从头开始提供解决方案。问题可能在于您如何提供文档。如果使用Ajax,则不能将其用作docx
,这应该不会太难。只需打开一个包含文档URL的新浏览器窗口。是的,但这意味着任何人都可以打开文档,如果他们知道URL,我需要保护它,否则我在第一篇文章中提到的方法就可以了。不难研究ajax下载
或angular$http下载
是的,我尝试过这些方法,但我遇到了一个错误。“很抱歉,我们无法打开name.docx,因为我们发现其内容有问题”然后您需要做的是显示您尝试了什么。。。人们将帮助解决这个问题。而不是要求人们从头开始提供解决方案。问题可能在于您如何提供文档。如果使用Ajax,则不能将其用作docx
,这应该不会太难。只需打开一个包含文档URL的新浏览器窗口。是的,但这意味着任何人都可以打开文档,如果他们知道URL,我需要保护它,否则我在第一篇文章中提到的方法就可以了。