如何使用Angular2和Java下载文件?
有一个GET HTTP调用,它返回文件数据:
如果收到一个byte []数组,该文件(在本例中为ODT,但可能是 其他格式)作为具有文字字节内容的文档打开 写在:" UEsDBBQAAAgAAPBZjklexjIMJwAAACcAAAA"
如果收到blob对象,则会显示 " {" binaryStream":{}," wrappedBlob" {" binaryStream":{}}}"在里面 文件
Angular2代码:
goFile() {
//This service calls @angular/http for a GET request and returs the response
//ends up doing:
// this.http.get(url, {responseType: ResponseContentType.Blob})
// .map(res => res.blob())
this.myService.subscribe(result=> { this.saveFile(result); });
return false;
}
downloadFile(file: any) {
var blob = new Blob([file], {type: 'application/vnd.oasis.opendocument.text'});
var url= window.URL.createObjectURL(blob);
window.open(url);
}
Java 代码只读取文件并返回一个blob或字节数组(在每种情况下都尝试过):
byte[] file = FileUtils.getFile("E:/file.odt");
return file;
byte[] file = FileUtils.getFile("E:/file.odt");
Blob blob = Hibernate.createBlob(fichero);
return blob;
更新
我认为问题在于,数据是作为json对象接收的,我正在使用的系统中进行设置。
尝试过从java返回byte []并尝试转换为Angular2中的blob(对于txt文件):
//file is returned by a call to http.get which has a map:
// .map(res => res.text())
var blob = new Blob([file], {type: 'text/plain'});
var objectUrl = URL.createObjectURL(blob);
window.open(objectUrl);
但返回一个包含字节内容的页面(" YWJj"),显然收到的内容不会转换为正确的blob对象。
也尝试了相同的结果:
var byteArray = new Uint8Array(file);
var blob = new Blob([byteArray], {type: 'text/plain'});
没有使用额外的插件,没有针对不同mime类型的解决方案吗?