2017-04-06 105 views
0

我正在使用Apache POI,并试图发送xlsx文件作为HTTP请求并将其作为响应返回。我正在使用jayway restassured进行HTTP请求。使用Apache POI将byteArray转换为XSSFWorkbook

这里是我发送请求

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 

回答

2

你不能简单地将字节数组作为ISO-8859-1编码文本您尝试的方式。

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

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

相关问题