0

zip4j lib を使用すると、サブフォルダーとファイルを含むフォルダーから zip ファイルを作成できます。しかし、今はRest APIでクライアントにダウンロードしたいので、使用していますZipOutputStreamが、生成されたzipファイルからInputStreamを取得する方法がわかりません。

zip ファイルを生成する方法。

public void generateBulkConfigFile(HttpServletResponse response, String root, String zippedFileName) {

    File rootFolder = FileUtil.createRootFolder(root);
    response.setStatus(HttpServletResponse.SC_OK);
    response.addHeader("Content-Disposition", "attachment; filename=\"" + "test.zip" + "\"");

    ZipParameters zipParameters = new ZipParameters();
    zipParameters.setEncryptFiles(true);
    zipParameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);
    zipParameters.setPassword("1234");

    //Code to process data, write files and subfolders to root folder

    try {
        ZipFile zipFile = new ZipFile(rootFolder.getAbsolutePath() +  System.lineSeparator() + zippedFileName + ".zip");
        zipFile.addFolder(rootFolder, zipParameters);

        //Todo: get inputstream from zipped file and write to response outputstream for client

    } catch (ZipException e) {
        log.error("Error: ", e);
        throw e;
    } catch (IOException e) {
        log.error("Error: ", e);
        throw e;
    }
}

上記のコードは、目的のフォルダーに zip ファイルを正常に作成しました。このコード行を追加して、応答への出力を試みました。

ZipOutputStream zipOutputStream = new ZipOutputStream(response.getOutputStream());
FileInputStream fileInputStream = new FileInputStream(zipFile.getFile());
IOUtils.copy(fileInputStream, zipOutputStream);

fileInputStream.close();
zipOutputStream.finish();
zipOutputStream.close();

しかし、それはクラスNullPointerExceptionのコピーメソッドで終わります。IOUtils

java.lang.NullPointerException: null
at net.lingala.zip4j.io.DeflaterOutputStream.write(DeflaterOutputStream.java:89) ~[zip4j-1.3.3.jar:?]
at net.lingala.zip4j.io.ZipOutputStream.write(ZipOutputStream.java:31) ~[zip4j-1.3.3.jar:?]
at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1793) ~[commons-io-2.4.jar:2.4]
at org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1769) ~[commons-io-2.4.jar:2.4]
at org.apache.commons.io.IOUtils.copy(IOUtils.java:1744) ~[commons-io-2.4.jar:2.4]

誰かがこの問題を解決するのを手伝ってくれますか? どうもありがとう。

4

1 に答える 1