A项目 调用B项目所在的N台服务器获取文件
//resource.play.export.urls=http://192.168.6.27:8980/,http://192.168.2.69:8080/
@Value("#{'${resource.play.export.urls}'.split(',')}")
private String[] resourcePlayExprtUrls;
@RequestMapping(value = "/exportResourcePlayByDay/{day}", method = RequestMethod.GET)
public void exportResourcePlayByDay(HttpServletResponse response, @PathVariable("day") int day) {
RestTemplate template = new RestTemplate();
ResponseEntity<Resource> entity;
String url = null;
for (int i = 0; i < resourcePlayExprtUrls.length; i++) {
try {
url = resourcePlayExprtUrls[i] + "projectname/style/exportResourcePlayByDay/" + day;
entity = template.postForEntity(url, null, Resource.class);
if (entity.getStatusCode().value() == HttpStatus.OK.value()) {
InputStream in = entity.getBody().getInputStream();
byte[] bytes = new byte[in.available()];
in.read(bytes);
List<String> strings = entity.getHeaders().get("exportFilename");
if (!CollectionUtils.isEmpty(strings)) {
response.addHeader("Content-Disposition", "attachment;filename=" + (strings.get(0)));
}
response.getOutputStream().write(bytes);
return;
}
} catch (Exception e) {
logger.error("export resource play statistics data error,url={}", url, e);
}
}
try {
response.getOutputStream().write("no data".getBytes("UTF-8"));
} catch (IOException e) {
logger.error(" response.getOutputStream() error", e);
}
}
B项目(N台服务器,待导出的文件在其中的一台,改服务没有返回HttpStatus.NO_CONTENT)
@RequestMapping(value = "/exportResourcePlayByDay/{day}", method = RequestMethod.POST)
public void exportResourcePlayByDay(HttpServletResponse response, @PathVariable("day") int day) {
long start = ServiceCommonUtil.getBeforeDateStartTimeStamp(day);
long end = ServiceCommonUtil.getBeforeDateEndTimeStamp(day);
FilenameFilter fileFilter = (File file, String name) -> {
if (name.contains(fileNamePre) && name.endsWith(".zip")) {
String[] splits = name.split("-");
if (splits[0].matches("\\d+")) {
Long time = Long.parseLong(splits[0]);
if (start <= time && end >= time) {
return true;
}
}
}
return false;
};
File file;
if (StringUtils.isEmpty(exportFileath)) {
file = new File(environment.getProperty("java.io.tmpdir"));
} else {
file = new File(exportFileath);
}
File[] files = file.listFiles(fileFilter);
if (files != null && files.length > 0) {
try {
response.addHeader("exportFilename", (files[0].getName()));
response.getOutputStream().write(FileUtils.readFileToByteArray(files[0]));
} catch (Exception e) {
logger.error("this server get export file succes ,but send to call(center) error,filename={}", files[0], e);
}
} else {
logger.info("this server not have export file");
response.setStatus(HttpStatus.NO_CONTENT.value());
return;
}
}