0

How to unzip a multipart file in-memory in java without creating it temporarily on disk? I cannot find any way to unzip it in-memory. I am getting a zip bundle of SSL certificates from API in multipart format. I want to unzip this and read into X509Certificate.

Here is my code (but its creating file on disk):

 if (!uploadedFile.isEmpty()) {
            File file = new File(uploadedFile.getOriginalFilename());
            file.createNewFile();
            FileOutputStream fos = new FileOutputStream(file);
            fos.write(uploadedFile.getBytes());
            fos.close();

            ZipFile zipFile = new ZipFile(file);
            ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream((File) uploadedFile));
            ZipEntry zipEntry = zipInputStream.getNextEntry();

            X509Certificate mainCert = null;
            Set<X509Certificate> certChain = new HashSet<>();

            while (zipEntry != null) {
                if (!zipEntry.isDirectory()) {
                    String fileName = zipEntry.getName();
                    if (fileName.endsWith(".cer") || fileName.endsWith(".crt") || fileName.endsWith(".pem") ||
                            fileName.endsWith(".cert") || fileName.endsWith(".key")) {
                        InputStream inputStream = zipFile.getInputStream(zipEntry);
                        CertificateFactory fact = CertificateFactory.getInstance("X.509");

                        X509Certificate certificate = (X509Certificate) fact.generateCertificate(inputStream);
                        if (certificate.getBasicConstraints() == -1) {
                            mainCert = certificate;
                        } else {
                            certChain.add(certificate);
                        }
                    }
                }
                zipEntry = zipInputStream.getNextEntry();
            }
            zipInputStream.closeEntry();
            zipInputStream.close();

P.S. I don't want to use Bouncy Castle libs for zip/unzip.

siso
  • 265
  • 1
  • 7
  • 20

0 Answers0