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.