在Java

时间:2016-12-15 09:16:22

标签: java file angular blob

如何使用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类型的解决方案吗?

0 个答案:

没有答案