Example to download multiple files using “multipart/x-mixed-replace”.
PS: This code does not work with Internet Explorer.
import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Downloading Multiple Files using "multipart/x-mixed-replace". * * @author JavaDigest */ public class DownloadMultipleFiles extends HttpServlet { private static final long serialVersionUID = 3305561818342965462L; public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Set the response type and specify the boundary string response.setContentType("multipart/x-mixed-replace;boundary=END"); // Set the content type based on the file type you need to download String contentType = "Content-type: text/rtf"; // List of files to be downloaded List files = new ArrayList(); files.add(new File("C:/first.txt")); files.add(new File("C:/second.txt")); files.add(new File("C:/third.txt")); ServletOutputStream out = response.getOutputStream(); // Print the boundary string out.println(); out.println("--END"); for (File file : files) { // Get the file FileInputStream fis = null; try { fis = new FileInputStream(file); } catch (FileNotFoundException fnfe) { // If the file does not exists, continue with the next file System.out.println("Could not find file " + file.getAbsolutePath()); continue; } BufferedInputStream fif = new BufferedInputStream(fis); // Print the content type out.println(contentType); out.println("Content-Disposition: attachment; filename=" + file.getName()); out.println(); System.out.println("Sending file " + file.getName()); // Write the contents of the file int data = 0; while ((data = fif.read()) != -1) { out.write(data); } fif.close(); // Print the boundary string out.println(); out.println("--END"); out.flush(); System.out.println("Finished sending file " + file.getName()); } // Print the ending boundary string out.println("--END--"); out.flush(); out.close(); } }
Yet another way to achieve this will be to zip all the files before downloading, and then download the zip file as a zip attachment.
Hi.
It this chrome-compatible?
I’m not able to make it work under chrome. It works fine when using Firefox though
Thank!
This code is not compatible with chrome.
Though chrome supports “multipart/x-mixed-replace”.
This code is not compatible with IE/Chrome/Safari ..
Just working for Firefox !!!!!
Please help me out .. !!!??