2017-04-06 22 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); 

ので、リクエストのために生成されたコードがあるの送信コードの一部です要求としていくつかの変更を加えて、それを文字列レスポンスとして取得してからxssfworkbookに変換して、xlsxファイルを送信します。

XSSFWorkbook workbook = new XSSFWorkbook(stream); 

LINE-Iは、次のエラーを取得するバック変換するときに私が手にエラーが

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

答えて

2

であるあなたは、単にISO-8859-1エンコードされたテキストとしてあなたがしようとする道をバイト配列を送信することはできません。

置換/切り捨て/変更される特殊文字があります。

現在、バイナリデータとテキスト専用チャネル(HTTP)を混在させています。別の方法で行う必要があります。バイナリデータ転送を使用し、それをStringに変換したり、バイナリからテキストへの変換を使用したりしないでください。 https://en.wikipedia.org/wiki/Binary-to-text_encoding、最も一般的なものはBase64

関連する問題