Java REST客户端接收和保存excel响应时出错(字节数组)
我让SpringREST服务以字节数组的形式返回excel文件(XLS),并且需要编写适当的客户端代码来接收此响应并保存该文件。无法获取字节数组响应,但在将其转换为excel工作簿(HSSFWorkbook)时出现以下错误 org.apache.poi.poifs.filesystem.NotOLE2FileException:头签名无效;读取0x000506000100809,应为0xE11AB1A1E011CFD0-您的文件似乎不是有效的OLE2文档 我尝试了以下方法,但没有成功Java REST客户端接收和保存excel响应时出错(字节数组),java,excel,rest,Java,Excel,Rest,我让SpringREST服务以字节数组的形式返回excel文件(XLS),并且需要编写适当的客户端代码来接收此响应并保存该文件。无法获取字节数组响应,但在将其转换为excel工作簿(HSSFWorkbook)时出现以下错误 org.apache.poi.poifs.filesystem.NotOLE2FileException:头签名无效;读取0x000506000100809,应为0xE11AB1A1E011CFD0-您的文件似乎不是有效的OLE2文档 我尝试了以下方法,但没有成功 在返回响应
HSSFWorkbook workbook = //code to generate the workbook
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
workbook.write(outputStream);
byte[] response = outputStream.toByteArray();
HSSFWorkbook workbook = //workbook creation call
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
workbook.write(outputStream);
response = outputStream.toByteArray();
headers = new HttpHeaders();
headers.setAccessControlExposeHeaders(Collections.singletonList("Content-Disposition"));
headers.set("Content-Disposition", "attachment; filename=download.xls");
headers.setAccessControlExposeHeaders(Collections.singletonList("Content-Type"));
headers.set("Content-Type","application/vnd.ms-excel");
outputStream.close();
String uri = //URI
RestTemplate restTemplate = new RestTemplate();
//input object
ResponseEntity<byte[]> result = restTemplate.postForEntity(uri, input, byte[].class);
if(result!=null && result.getStatusCodeValue() == 200 && result.getBody()!=null && result.getBody().length>0)
{
ByteArrayInputStream inputStream = new ByteArrayInputStream(result.getBody());
HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
FileOutputStream outputStream = new FileOutputStream("output\\download.xls");
workbook.write(outputStream);
inputStream.close();
workbook.close();
outputStream.close();
}
非常感谢您的帮助。找到问题并解决 服务器端代码
HSSFWorkbook workbook = //code to generate the workbook
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
workbook.write(outputStream);
byte[] response = outputStream.toByteArray();
HSSFWorkbook workbook = //workbook creation call
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
workbook.write(outputStream);
response = outputStream.toByteArray();
headers = new HttpHeaders();
headers.setAccessControlExposeHeaders(Collections.singletonList("Content-Disposition"));
headers.set("Content-Disposition", "attachment; filename=download.xls");
headers.setAccessControlExposeHeaders(Collections.singletonList("Content-Type"));
headers.set("Content-Type","application/vnd.ms-excel");
outputStream.close();
String uri = //URI
RestTemplate restTemplate = new RestTemplate();
//input object
ResponseEntity<byte[]> result = restTemplate.postForEntity(uri, input, byte[].class);
if(result!=null && result.getStatusCodeValue() == 200 && result.getBody()!=null && result.getBody().length>0)
{
ByteArrayInputStream inputStream = new ByteArrayInputStream(result.getBody());
HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
FileOutputStream outputStream = new FileOutputStream("output\\download.xls");
workbook.write(outputStream);
inputStream.close();
workbook.close();
outputStream.close();
}
客户端代码
HSSFWorkbook workbook = //code to generate the workbook
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
workbook.write(outputStream);
byte[] response = outputStream.toByteArray();
HSSFWorkbook workbook = //workbook creation call
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
workbook.write(outputStream);
response = outputStream.toByteArray();
headers = new HttpHeaders();
headers.setAccessControlExposeHeaders(Collections.singletonList("Content-Disposition"));
headers.set("Content-Disposition", "attachment; filename=download.xls");
headers.setAccessControlExposeHeaders(Collections.singletonList("Content-Type"));
headers.set("Content-Type","application/vnd.ms-excel");
outputStream.close();
String uri = //URI
RestTemplate restTemplate = new RestTemplate();
//input object
ResponseEntity<byte[]> result = restTemplate.postForEntity(uri, input, byte[].class);
if(result!=null && result.getStatusCodeValue() == 200 && result.getBody()!=null && result.getBody().length>0)
{
ByteArrayInputStream inputStream = new ByteArrayInputStream(result.getBody());
HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
FileOutputStream outputStream = new FileOutputStream("output\\download.xls");
workbook.write(outputStream);
inputStream.close();
workbook.close();
outputStream.close();
}
stringuri=//uri
RestTemplate RestTemplate=新RestTemplate();
//输入对象
ResponseEntity结果=restTemplate.postForEntity(uri,输入,字节[].class);
如果(结果!=null&&result.getStatusCodeValue()==200&&result.getBody()!=null&&result.getBody().length>0)
{
ByteArrayInputStream inputStream=新建ByteArrayInputStream(result.getBody());
HSSF工作簿=新的HSSF工作簿(inputStream);
FileOutputStream outputStream=新的FileOutputStream(“output\\download.xls”);
workbook.write(outputStream);
inputStream.close();
workbook.close();
outputStream.close();
}