如何在 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-ControlContent-Type。这是我的帖子以获取更多详细信息***.com/questions/39825590/… 先前的评论是错误的,因为从链接问题的答案中可以明显看出,问题中的问题不是 Chrome,而是请求是 CORS 并且需要明确许可访问标题。

以上是关于如何在 JavaScript 中检索 HttpResponseMessage 文件名的主要内容,如果未能解决你的问题,请参考以下文章

如何在javascript中检索文本区域的值

如何在 JavaScript 中检索 HttpResponseMessage 文件名

如何通过 Javascript 在 wordpress 中检索当前用户?

如何使用 javascript 在 Liferay 中检索用户个人资料图片

如何在javascript中检索数组内的数组?

如何在javascript中发送和检索json中的十进制值?