我正在使用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
答案 0 :(得分:3)
您不能像您尝试的那样简单地将字节数组作为ISO-8859-1
编码文本发送。
可能会有替换/截断/修改的特殊字符。
目前,您混合使用二进制数据和纯文本通道(HTTP)。您将需要以不同的方式执行此操作,使用二进制数据传输,而不是将其转换为String或使用某些二进制文本表示,请参阅例如https://en.wikipedia.org/wiki/Binary-to-text_encoding,最常见的是Base64