我有这个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?
答案 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
标头的值。你将不得不做一些简单的解析来获得实际的文件名。