-3

応答本文で複数のファイルを一度に送信しようとしています。私の問題は、複数の配列リストを 1 つに連結できず、後で複数のファイルに分離し直すことができなかったことです。

これは私のコードです(動作していません):

       List<PDDocument> documents =  splitter.split(PDDocument.load(documentData));
            ArrayList<byte[]> newDocuments = new ArrayList<>();
            for (PDDocument doc : documents)
            {
                ByteArrayOutputStream os = new ByteArrayOutputStream();
                doc.save(os);
                newDocuments.add(os.toByteArray());
                os.close();


            }
            t.sendResponseHeaders(200,newDocuments.toArray().length);;
            OutputStream responseBody = t.getResponseBody();
            responseBody.write(newDocuments.toArray());
            responseBody.close();

だから私の質問は:

java 11 httpサーバーを使用して複数のファイルを単一のhttp応答に戻す方法は?

ありがとうございました !

アップデート :

Joni の助けを借りてコードを修正した後、別の問題に直面しています: 生成された Zip が破損しています:

これはコードです:

   Splitter splitter = new Splitter();
            List<PDDocument> documents =  splitter.split(PDDocument.load(documentData));


            t.sendResponseHeaders(200, 0);
            t.getResponseHeaders().set("Content-Type", "application/zip");

            OutputStream responseBody = t.getResponseBody();
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            ZipOutputStream zos = new ZipOutputStream(baos);


            int counter = 1;
            for (PDDocument doc : documents)
            {
                ZipEntry zipEntry = new ZipEntry("document" + counter);
                zos.putNextEntry(zipEntry);
                ByteArrayOutputStream docOs = new ByteArrayOutputStream();
                doc.save(docOs);
                docOs.close();
                zos.write(docOs.toByteArray());
                zos.closeEntry();
                zos.finish();
                zos.flush();

                counter++;
            }
            zos.close();
            baos.close();


            responseBody.write(baos.toByteArray());
            responseBody.flush();


            responseBody.close();
4

1 に答える 1