编程语言
首页 > 编程语言> > 在服务器上创建Zip文件并使用java下载该zip文件

在服务器上创建Zip文件并使用java下载该zip文件

作者:互联网

我有以下代码从mkyong到本地的zip文件.但是,我的要求是在服务器上压缩文件并需要下载.任何人都可以帮忙.

代码写入zipFiles:

public void zipFiles(File contentFile, File navFile)
{
    byte[] buffer = new byte[1024];

    try{
        // i dont have idea on what to give here in fileoutputstream
        FileOutputStream fos = new FileOutputStream("C:\\MyFile.zip");
        ZipOutputStream zos = new ZipOutputStream(fos);
        ZipEntry ze= new ZipEntry(contentFile.toString());
        zos.putNextEntry(ze);
        FileInputStream in = new FileInputStream(contentFile.toString());

        int len;
        while ((len = in.read(buffer)) > 0) {
            zos.write(buffer, 0, len);
        }

        in.close();
        zos.closeEntry();

        //remember close it
        zos.close();

        System.out.println("Done");

    }catch(IOException ex){
       ex.printStackTrace();
    }
}

我可以在fileoutputstream中提供什么? contentfile和navigationfile是我从代码创建的文件.

解决方法:

如果您的服务器是一个servlet容器,只需编写一个HttpServlet来进行压缩并为该文件提供服务.

您可以将servlet响应的输出流传递给ZipOutputStream的构造函数,zip文件将作为servlet响应发送:

ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());

在压缩之前不要忘记设置响应mime类型,例如:

response.setContentType("application/zip");

全貌:

public class DownloadServlet extends HttpServlet {

    @Override
    public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
        response.setContentType("application/zip");
        response.setHeader("Content-Disposition", "attachment; filename=data.zip");

        // You might also wanna disable caching the response
        // here by setting other headers...

        try ( ZipOutputStream zos = new ZipOutputStream(response.getOutputStream()) ) {
            // Add zip entries you want to include in the zip file
        }
    }
}

标签:java,zip,java-io
来源: https://codeday.me/bug/20190722/1506840.html