Sar*_*a G 16 c# pdf asp.net-web-api angularjs
我有一个web api方法,它返回一个HttpResponseMessage
包含PDF文件.该方法看起来像这样:
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = new StreamContent(new FileStream(path, FileMode.Open, FileAccess.Read));
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = fileName;
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
return response;
Run Code Online (Sandbox Code Playgroud)
当我从客户端(用angularJS编写)调用此api时,Internet Download Manager会自动捕获PDF文件并想要下载它.因为我的项目有安全计划,IDM会自动请求用户名和密码.有没有人知道我应该如何以编程方式阻止IDM捕获PDF文件?
更新:这是我的angularJS代码:
$http.post(url, { transactionId: txId }
, {responseType: 'arraybuffer'})
.success(function (response) {
var reader = new FileReader();
var file = new Blob([response.data], {type: 'application/pdf'});
reader.onload = function (e) {
var printElem = angular.element('#printPdfLink');
printElem.attr('target', '_blank');
printElem.attr('href', reader.result);
printElem.attr('ng-click', '');
};
reader.readAsDataURL(file);
})
.error(function (error) {});
Run Code Online (Sandbox Code Playgroud)
将mime类型更改application/octet-stream
为解决问题的方法.确保文件名包含正确的文件扩展名,以便下载后客户端系统可以识别它.
另一个问题是attachment
内容的处理,这通常会迫使它将其保存为文件下载.将其更改为inline
以便客户端可以使用它而无需IDM尝试将其作为附件下载.
var stream = new FileStream(path, FileMode.Open, FileAccess.Read);
var content new StreamContent(stream);
content.Headers.ContentDisposition = new ContentDispositionHeaderValue("inline");
content.Headers.ContentDisposition.FileName = fileName;
content.Headers.ContentType = MediaTypeHeaderValue.Parse("application/octet-stream");
var response = Request.CreateResponse(HttpStatusCode.OK);
response.Content = content;
return response;
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
946 次 |
最近记录: |