在我的AngularJS网站中,我想加载.pdf文档并在新的浏览器标签中显示它们。以下代码有效,但有些事情困扰我:
createdObjectURL设置为文档和浏览器选项卡的标题。这意味着我的文档总是被标题为01d9bdca-9af2-43f0-a83f-f36fd82fd72
这样的东西,这并不是真正的体面。并且可见的URL也不好。而不是blob:http://localhost:8080/01d9bdca-9af2-43f0-a83f-f36fd82fd72f
,最好是在service.js中调用我。
我试图处理HttpHeaders中的文件名,但这根本没有效果:(
另一个奇怪的事情是:如果我没有指定{responseType: "arraybuffer"}
,则PDF标题会正确显示。但没有内容,文件是空的。
有关如何更改文件名和/或URL的任何帮助将不胜感激。谢谢。
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-Service
@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?
答案 0 :(得分:3)
打开一个新选项卡,其中包含返回字节数组的资源的url!类似的东西:
$window.open('localhost:xxx/api/document', '_blank');