JBoss Seam problem with download file big file
gregtk Jan 26, 2008 6:15 AMI try modify File Servlet from wiki example. Because I need get file from filesystem. My code look:
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ package ru.fuckorama.servlets; import javax.persistence.EntityManager; import javax.persistence.NoResultException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.transaction.UserTransaction; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class FileServlet extends HttpServlet { private static final String DOWNLOAD_PATH = "/download.seam"; private byte[] fileNotFoundImage; public FileServlet() { InputStream in = getClass().getResourceAsStream("/img/filenotfound.png"); if (in != null) { ByteArrayOutputStream out = new ByteArrayOutputStream(); byte[] buffer = new byte[512]; try { int read = in.read(buffer); while (read != -1) { out.write(buffer, 0, read); read = in.read(buffer); } fileNotFoundImage = out.toByteArray(); } catch (IOException e) { } } } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { File file = null; int length = 0; if (DOWNLOAD_PATH.equals(request.getPathInfo())) { UserTransaction userTx = null; boolean startedTx = false; try { userTx = (UserTransaction) org.jboss.seam.Component.getInstance("org.jboss.seam.transaction.transaction"); if (userTx.getStatus() != javax.transaction.Status.STATUS_ACTIVE) { startedTx = true; userTx.begin(); } String id = request.getParameter("fileId"); file = new File("c:/arch/" + id); length = (int) file.length(); if (startedTx) { userTx.commit(); } } catch (Exception ex) { try { if (startedTx) { userTx.rollback(); } } catch (Exception rbEx) { rbEx.printStackTrace(); } throw new RuntimeException(ex); } response.setContentType("application/pdf"); response.setHeader("Content-Disposition", "attachement; filename=\"" + file.getName() + "\""); FileInputStream fileToDownload = new FileInputStream(file); response.setContentLength(fileToDownload.available()); int c; while ((c = fileToDownload.read()) != -1) { response.getOutputStream().write(c); } response.getOutputStream().flush(); } } }
When I ask from server big file(100mb), I get error with OutMemoryHeap on Jboss server. Please somebody help me.....