如何在 JavaScript 中检索 HttpResponseMessage 文件名
Posted
技术标签:
【中文标题】如何在 JavaScript 中检索 HttpResponseMessage 文件名【英文标题】:How to retrieve HttpResponseMessage FileName in JavaScript 【发布时间】:2015-05-18 06:28:31 【问题描述】:我有这个 WebAPI 方法,它将自定义对象 MyType
作为输入并基于该对象生成 PDF。 PDF 文件以HttpResponseMessage
形式返回。请注意,我在response.Content.Headers.ContentDisposition.FileName
上指定了文件名:
ASP.NET WebAPI
[Route("")]
public HttpResponseMessage Get([FromUri]MyType input)
var pdfContent = PdfGenerator.Generate(input);
var response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = pdfContent;
response.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = "MyCustomFileName.pdf"
return response;
在 AngularJS 中,我使用 FileSaver.js 获取文件,如下所示:
$http.get("api/pdf/",
params:
"type": myObject
,
responseType: 'arraybuffer'
).then(function (results)
var data = results.data;
var file = new Blob([data], type: 'application/pdf' );
saveAs(file, 'filename.pdf');
, function (results)
console.log(results);
);
它作为例外工作,但我在 WebAPI 和 javascript 中都定义了文件名。有没有办法,我可以在 JavaScript 的 results
变量中检索 WebAPI 中定义的 FileName?
【问题讨论】:
【参考方案1】:$http
的方法返回的承诺作为参数传递给具有以下属性 (ref) 的对象:
data – string|Object – 使用转换函数转换的响应正文。 status – number – 响应的 HTTP 状态代码。 headers – function([headerName]) – Header getter 函数。 config – Object – 用于生成请求的配置对象。 statusText – string – 响应的 HTTP 状态文本。
所以results.headers('Content-Disposition')
将为您提供Content-Disposition
标头的值。您必须进行一些简单的解析才能得到实际的文件名。
【讨论】:
上述解决方案在 Chrome 中不起作用,因为它只返回标题Cache-Control
和 Content-Type
。这是我的帖子以获取更多详细信息***.com/questions/39825590/…
先前的评论是错误的,因为从链接问题的答案中可以明显看出,问题中的问题不是 Chrome,而是请求是 CORS 并且需要明确许可访问标题。以上是关于如何在 JavaScript 中检索 HttpResponseMessage 文件名的主要内容,如果未能解决你的问题,请参考以下文章
如何在 JavaScript 中检索 HttpResponseMessage 文件名
如何通过 Javascript 在 wordpress 中检索当前用户?