好吧,我已經閱讀了關於從Web服務下載PDF的每個堆棧溢出問題。迄今爲止,他們都沒有幫助過我。我將此作爲最後一次努力嘗試並獲得一些答案。基本上,我正在向API發出GET請求,並且需要返回動態生成的PDF。我們試圖通過收到byte[]
來做到這一點,現在我們正在返回包含內容的信息流。下面就是我們在Web服務控制器:從AngularJS的.NET控制器下載PDF
var result = await resp.Content.ReadAsAsync<byte[]>();
var response = request.CreateResponse(HttpStatusCode.OK);
var dataStream = new MemoryStream(result);
response.Content = new StreamContent(dataStream);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
response.Content.Headers.ContentDisposition.FileName = "idcard.pdf";
var fileStream = new FileStream(@"c:\temp\temp.pdf", FileMode.Create);
fileStream.Write(result, 0, result.Length);
fileStream.Close();
return response;
通過FileStream的部分是我們在做,看看是否將數據保存到臨時文件工作的測試和PDF格式保存即可。這部分工作。去c:\ temp並打開idcard.pdf文件完美。其中一個問題就是它默默無聞,用戶不知道它在那裏。我們可以告訴他們,但我們確實希望PDF在瀏覽器中默認打開並/或通過瀏覽器保存,以便他們知道發生了什麼事情。
我的角度代碼如下所示:
.factory('memberIdCard', ['$http', function($http) {
var get = function() {
return $http({
method: 'GET',
url: '/Member/IdCard',
headers: {
accept: 'application/octet-stream'
},
responseType: 'arraybuffer',
transformResponse: function(data) {
var pdf;
console.log('data: ', data);
if (data) {
pdf = new Blob([data], {
type: 'application/pdf'
});
console.log('pdf: ', pdf);
}
return pdf;
}
})
}
return {
get: get
}
}]);
我已經試過這部分與$http
和$resource
既不作品。現在,在我的控制器:
$scope.printIdCard = function() {
memberIdCard.get().then(function(data) {
var pdf = data.data;
FileSaver.saveAs(pdf, 'idcard.pdf');
var pdfUrl = window.URL.createObjectURL(pdf);
$scope.pdfView = $sce.trustAsResourceUrl(pdfUrl);
window.open($scope.pdfView);
});
作爲一個說明,FileSaver
是angular-file-saver。
畢竟,打開新窗口,但出現如下錯誤:無法加載PDF文檔,並且如果嘗試在Adobe Acrobat中打開它,則會出現如下錯誤:Adobe Acrobat Reader DC無法打開'idcard.pdf',因爲它不是受支持的文件類型,或者是因爲文件已損壞(例如,它是作爲電子郵件附件發送的,未正確解碼)。
任何幫助將不勝感激。我覺得我已經完成了許多其他SO問題中提出的一切,但也許我錯過了一些我無法看到的東西。
謝謝!
感謝您的答覆,並與我們聯繫。我實施了所有這一切,但它仍然沒有幫助我。我認爲它基本上是以角度文件保護程序的方式做的,只是以不同的方式。在我們的結局中必須有其他的東西出現問題,並使其不能正常工作。 – pjlamb12