【发布时间】:2019-12-08 15:08:19
【问题描述】:
我有一个 Spring Boot 应用程序,它提供 100 张压缩并通过 StreamingResponseBody 发送的图像,有没有办法从 Angular 应用程序中使用此服务?
@GetMapping(value = "/initialize")
public ResponseEntity<StreamingResponseBody> initializeSlider(final HttpServletResponse response,
String axis,String nodeId) {
Long totalCount = imageRepository.countImageByAxisAndNodeId(axis,nodeId);
int interval = Math.round(totalCount / 50) ;
List<Integer> sequenceList = new ArrayList<>();
for(int i=0;i<totalCount;i=i+interval){
int nextSequence = i + interval;
sequenceList.add(nextSequence);
}
System.out.println(sequenceList.toString());
System.out.println(sequenceList);
response.setContentType("application/zip");
// response.setHeader("Content-Disposition", "attachment;filename=sample.zip");
StreamingResponseBody stream = out -> {
final ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream());
List<Image> imageList = imageRepository.findImageBySequenceIdIn(sequenceList);
try {
imageList.stream().forEach(image -> {
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(image);
oos.flush();
byte [] data = bos.toByteArray();
final InputStream inputStream = new ByteArrayInputStream(data);
final ZipEntry zipEntry = new ZipEntry(image.getName());
zipOut.putNextEntry(zipEntry);
//IOUtils.copy(inputStream,zipOut);
byte[] bytes = new byte[1024];
int length;
while ((length = inputStream.read(bytes)) >= 0) {
zipOut.write(bytes, 0, length);
}
zipOut.closeEntry();
inputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
});
}catch (Exception e){
e.printStackTrace();
}finally {
zipOut.flush();
zipOut.close();
}
};
System.out.println(stream);
logger.info("steaming response {} ", stream);
return new ResponseEntity(stream, HttpStatus.OK);
}
【问题讨论】:
-
你自己有没有尝试过?
标签: angular spring-boot