如何在Servlet上从bytearray返回zip



再次使用Java EE。

在示例

  1. 在servlet上我有byte[] fileContent ---->(file.txt)
  2. 我试着添加到zip文件
  3. 设置servlet为

    response.setContentType("Content-type: text/zip");
    response.setHeader("Content-Disposition",
            "attachment; filename=mytest.zip");
    // List of files to be downloaded
    List files = new ArrayList();
    files.add(new File("C:/first.txt"));
    ServletOutputStream out = response.getOutputStream();
    ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(out));
    for (File file : files) {
        System.out.println("Adding " + file.getName());
        zos.putNextEntry(new ZipEntry(file.getName()));
        // Get the file
        FileInputStream fis = null;
        try {
            fis = new FileInputStream(file);
        } catch (FileNotFoundException fnfe) {
            // If the file does not exists, write an error entry instead of
            // file
            // contents
            zos.write(("ERRORld not find file " + file.getName())
                    .getBytes());
            zos.closeEntry();
            System.out.println("Couldfind file "
                    + file.getAbsolutePath());
            continue;
        }
        BufferedInputStream fif = new BufferedInputStream(fis);
        // Write the contents of the file
        int data = 0;
        while ((data = fif.read()) != -1) {
            zos.write(data);
        }
        fif.close();
        zos.closeEntry();
        System.out.println("Finishedng file " + file.getName());
    }
    zos.close();
    

    }}

我对第二点有问题。我尝试了几种解决方案,但它们都很难与我的servlet一起工作或不起作用。

有人能告诉我一个例子如何添加文件作为字节数组压缩和返回servlet作为附件?谢谢你的建议和建议

,文章编辑

我尝试了类似的东西,但是我如何添加byte[]而不是file

解决方案示例:

public class ZipFileServlet extends HttpServlet {
private static final int DEFAULT_BUFFER_SIZE = 10240; // 10KB.
private YourFileDAO yourFileDAO = YourDAOFactory.getYourFileDAO();
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
{
    String[] fileIds = request.getParameterValues("fileId");
    response.setContentType("application/zip");
    response.setHeader("Content-Disposition", "attachment; filename="allfiles.zip"");
    ZipOutputStream output = null;
    byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
    try {
        output = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream(), DEFAULT_BUFFER_SIZE));
        for (String fileId : fileIds) {
            YourFileItem item = yourFileDAO.find(fileId);
            if (item == null) continue; // Handle yourself. The fileId may be wrong/spoofed.
            InputStream input = null;
            try {
                input = new BufferedInputStream(item.getInputStream(), DEFAULT_BUFFER_SIZE);
                output.putNextEntry(new ZipEntry(item.getName()));
                for (int length = 0; (length = input.read(buffer)) > 0;) {
                    output.write(buffer, 0, length);
                }
                output.closeEntry();
            } finally {
                if (input != null) try { input.close(); } catch (IOException logOrIgnore) { /**/ }
            }
        }
    } finally {
        if (output != null) try { output.close(); } catch (IOException logOrIgnore) { /**/ }
    }
}
 }

相关内容

  • 没有找到相关文章

最新更新