在我的AngularJS網站中,我想加載.pdf文檔並在新的瀏覽器選項卡中顯示它們。下面的代碼可以工作,但有些東西會打擾我:AngularJS在新選項卡中打開PDF並更改文件名/ URL
createdObjectURL被設置爲文檔和瀏覽器選項卡的標題。這意味着我的文檔總是被標題爲01d9bdca-9af2-43f0-a83f-f36fd82fd72
,這不太合適。可見的URL也不好。而不是blob:http://localhost:8080/01d9bdca-9af2-43f0-a83f-f36fd82fd72f
最好是在service.js中調用我所調用的URL。
我試圖以處理HttpHeaders文件名,但沒有任何效果可言:(
另一個奇怪的事情:如果我不指定{responseType: "arraybuffer"}
,正確顯示PDF格式的標題,但沒有。沒有內容,該文件是空的。
如何更改文件名和/或網址,將不勝感激任何幫助,謝謝。
JS控制器
DocumentService.getDocument().then(function(response) {
$window.open(response, '_blank');
});
JS服務
return {
getDocument : function() {
return $http.get("document", {responseType: "arraybuffer"})
.then(function(response) {
var file = new Blob([response.data], {type: "application/pdf"});
var fileURL = URL.createObjectURL(file);
return fileURL;
}
}
}
Spring MVC的REST的服務
@RequestMapping(value = "/document", method = RequestMethod.GET)
public ResponseEntity<byte[]> getDocument(){
try {
File file = new File("C:\\pathToFile.pdf");
byte[] fileContent = new byte[(int) file.lenth()];
HttpHeaders heraders = new HttpHeaders();
headers.setContentType(MediaType.parseMediaType("application/pdf"));
String filename = "NameOfFile.pdf";
headers.setContentDispositionFormData(filename, filename); //doesn't change anything
fileContent = File.readAllBytes(file.toPath());
ResponseEntity<byte[]> response = new ResponseEntity<byte[]>(fileContent, headers, HttpStatus.OK);
return response;
} catch (FileNotFoundException e) {
System.err.println("File not found " + e);
} catch (IOException e) {
System.err.pringln("Error while reading file " + e);
}
}
短版: 當PDF文件在加載爲字節數組並顯示其新的瀏覽器選項卡與AngularJS $ window指令:是否有很好的可能性來更改文件名和URL?
難道你不能只打開一個新的選項卡與url的資源返回字節數組?就像'$ window.open('localhost:xxx/api/document','_blank');' – Amygdaloideum
謝謝@DanielBornstrand,這個工程。窗口標題現在只是「文檔」,但文檔標題(如果文檔被下載)是我指定的標題。這不是100%完美,但比以前更好,也更少的代碼:) – Freddy
我將它作爲答案張貼! :) – Amygdaloideum