使用Apache POI将byteArray转换为XSSFWorkbook

我正在使用Apache POI,我正在尝试将xlsx文件作为HTTP请求发送并将其作为响应返回。 我正在使用jayway restassured来发出HTTP请求。

这是我发送请求的代码部分

  File file = new File("path"); String response = given().multipart(file).when().post("URL").getBody().asString(); byte[] bytes = response.getBytes("ISO-8859-1"); InputStream stream = new ByteArrayOutputStream(bytes); try { XSSFWorkbook workbook = new XSSFWorkbook(stream); } catch(Exception e){ e.printStackTrace(); } 

以下是为请求生成响应的代码

 XSSFWorkbook workBook; //this workBook has the workbook sent as HTTP request //code to make changes in workBook ByteArrayOutputStream outStream = new ByteArrayOutputStream(); workBook.write(outStream); byte[] byteArray = outStream.toByteArray(); String responseBody = new String(byteArray, "ISO-8859-1"); context.response().putHeader("Content-Type", "multipart/form-data").setStatusCode(200).end(responseBody); 

所以,我要做的是发送一个xlsx文件作为请求进行一些更改并将其作为字符串响应返回,将其转换回xssfworkbook。 当转换回来时,我在以下行中得到错误 –

 XSSFWorkbook workbook = new XSSFWorkbook(stream); 

我得到的错误是

 java.util.zip.ZipException: invalid code lengths set 

您不能像您尝试的那样简单地将字节数组作为ISO-8859-1编码文本发送。

将有可能被替换/截断/修改的特殊字符。

目前,您混合二进制数据和纯文本通道(HTTP)。 您需要采用不同的方式,使用二进制数据传输而不是将其转换为String或使用一些二进制文本表示,请参阅https://en.wikipedia.org/wiki/Binary-to-text_encoding ,最常见的是Base64