我想使用Spring rest
生成响应。此响应应包括一个excel文件和一些json数据。另外,我想在Angular中解析此响应。
答案 0 :(得分:0)
为E. Sundin 提到过,它是通过服务器上的base64编码并发送包含此base64字符串的json并按以下所示在Angular中解析json来工作的-
Java代码-
byte[] bytes = null;
String base64 = null;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
workbook.write(bos);
} finally {
bos.close();
}
bytes = bos.toByteArray();
base64 = Base64.getEncoder().encodeToString(bytes);
Map<String, Object> resMap = new HashMap<>();
resMap.put("failed", 12);
resMap.put("attempted", 20);
resMap.put("file", base64);
return new ResponseEntity(resMap, HttpStatus.OK);
角度代码-
this.service.call().subscribe(data => {
this.totalFailed = data.failed;
this.totalUploaded = data.attempted;
window.open('data:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;base64,'+ data.file);
});
答案 1 :(得分:0)
Base64编码在技术上可以正常工作,但是请注意,它将给以下人员带来额外的负担:
此外,由于我从事的项目之一具有此功能,因此像这样使用JSON(复制和传播等)非常不方便
如果这是一个可以接受的解决方案,请继续使用它,它将起作用,而且您也不会丢失任何数据。
但是,还有其他方法:
很明显-拆分请求,考虑到我上面已经提到的考虑,您将得出以下结论:对服务器进行两次调用,其中之一将返回JSON,而另一个excel文件将使您更好地工作。
使用某种多部分混合响应,通过这种方法您只能打个电话,但是,这不是如何在客户端上解决这个问题,我不知道角度/浏览器总体上是否支持这一点。