如何在JavaScript中检索HttpResponseMessage FileName

时间:2015-03-16 07:42:08

标签: javascript angularjs asp.net-web-api

我有这个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 个答案:

答案 0 :(得分:6)

$http方法返回的promise作为参数传递给具有以下属性的对象(ref):

  
      
  • data - {string | Object} - 使用转换函数转换的响应体。
  •   
  • status - {number} - 响应的HTTP状态代码。
  •   
  • headers - {function([headerName])} - Header getter function。
  •   
  • config - {Object} - 用于生成请求的配置对象。
  •   
  • statusText - {string} - 响应的HTTP状态文本。
  •   

因此results.headers('Content-Disposition')会为您提供Content-Disposition标头的值。你将不得不做一些简单的解析来获得实际的文件名。