How to create ZIP files using list of Input streams?
Asked Answered
I

2

9

In my case I have to download images from the resources folder in my web app. Right now I am using the following code to download images through URL.

url = new URL(properties.getOesServerURL() + "//resources//WebFiles//images//" + imgPath);

filename = url.getFile();               

is = url.openStream();
os = new FileOutputStream(sClientPhysicalPath + "//resources//WebFiles//images//" + imgPath);

b = new byte[2048];

while ((length = is.read(b)) != -1) {
    os.write(b, 0, length);
}

But I want a single operation to read all images at once and create a zip file for this. I don't know so much about the use of sequence input streams and zip input streams so if it is possible through these, please let me know.

Imbricate answered 24/8, 2013 at 9:56 Comment(4)
so are you asking how to download all images in //resources//WebFiles//images// and zip them into one zip file? How does imgPath get assigned?Navicert
I already have imgPath.In my case i have list of imagepath that is located at //resources//WebFiles//images.I have to download all these images through URL at once.Imbricate
Couldn't you just a ZipOuputStream docs.oracle.com/javase/6/docs/api/java/util/zip/… and do something like what is done here examples.javacodegeeks.com/core-java/util/zip/… by looping through each image?Navicert
thanx for your efforts,but i have already gone throgh that example.it is useful upto 70%.here they have used the physical path of the file but in my case i dont have aphysical path. i have rendered image on broser only.Imbricate
N
8

The only way I can see you being able to do this is something like the following:

try {

    ZipOutputStream zip = new ZipOutputStream(new FileOutputStream("C:/archive.zip"));

    //GetImgURLs() is however you get your image URLs

    for(URL imgURL : GetImgURLs()) {
        is = imgURL.openStream();
        zip.putNextEntry(new ZipEntry(imgURL.getFile()));
        int length;

        byte[] b = new byte[2048];

        while((length = is.read(b)) > 0) {
            zip.write(b, 0, length);
        }
        zip.closeEntry();
        is.close();
    }
    zip.close();
}

Ref: ZipOutputStream Example

Navicert answered 24/8, 2013 at 12:38 Comment(3)
@amitsingh it's a pleasure, glad I could help.Navicert
@fujy any updates for 2023?Fley
@ViktorFridman I am not the answer author/owner, I just edited itMunch
C
2

The url should return zip file. Else you have to take one by one and create a zip using your program

Continence answered 24/8, 2013 at 10:0 Comment(2)
may you explain it in some more detailsImbricate
You can make a list of Files. Then, create a zip file. Loop over the list and write each file to that zip. You can refer to this for creating zipfile. #1092288Continence

© 2022 - 2024 — McMap. All rights reserved.