Download com Servlet Problema [Resolvido]

5 respostas
H

Galera, tenho o interesse de estar permitindo um download através do Serverlet, segue os dois códigos
Estou usando Netbeans.

Tela principal

out.println("<form action=\"ServletDownloadDemo\" method=\"post\" >  ");
     out.println("   <input type=\"submit\" value=\"Exportar\" /> ");   
    out.println("</form>  ");

tela ServletDownloadDemo

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.sql.SQLException;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class ServletDownloadDemo extends HttpServlet{
 
  private static final int BYTES_DOWNLOAD = 1024;
  private boolean autentificado;

    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException, SQLException, ClassNotFoundException{
	response.setContentType("text/plain");
	response.setHeader("Content-Disposition",
                     "attachment;filename=texting.txt");
	ServletContext ctx = getServletContext();
	InputStream is = ctx.getResourceAsStream("testing.txt");
 
	int read=0;
	byte[] bytes = new byte[BYTES_DOWNLOAD];
	OutputStream os = response.getOutputStream();
 
	while((read = is.read(bytes))!= -1){
		os.write(bytes, 0, read);
	}
	os.flush();
	os.close();	
   }
}

quando eu clico para receber o arquivo ele de me devolve:

HTTP Status 404 - /NovoTeste/ServletDownloadDemo

type Status report

message /NovoTeste/ServletDownloadDemo

description The requested resource (/NovoTeste/ServletDownloadDemo) is not available.
Apache Tomcat/7.0.27

Podem me ajudar a compreender o que está errado?

5 Respostas

H

Eu realmente não estou conseguindo, alguem pode me dar uma luz?

D

Ai parceiro tenta esse código…
Teh mais abraços!

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            File arquivo = new File("C:\\Users\\Douglas Manteiga\\Documents\\aula08.pdf");
            response.setHeader("Content-Disposition", "attachment; filename = " + arquivo.getName());
            response.setContentType("octet-stream");
            int BUFF_SIZE = 1024;
            byte[] buffer = new byte[BUFF_SIZE];
            response.setContentLength((int) arquivo.length());
            FileInputStream fis = new FileInputStream(arquivo);
            OutputStream os = response.getOutputStream();
            int byteCount = 0;

            do {
                byteCount = fis.read(buffer);
                if (byteCount == -1) {
                    break;
                }
                os.write(buffer, 0, byteCount);
                os.flush();
            } while (true);
        } finally {
        }
    }
C

Olá douglasmanteiga.

Cara segui o seu código, mas meus parametros request, response vem nulos.

Na verdade segui outros tutoriais, mas acontece a mesma coisa. Sera que poderia me ajudar?

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            File arquivo = new File("C:\\Users\\Douglas Manteiga\\Documents\\aula08.pdf");
            response.setHeader("Content-Disposition", "attachment; filename = " + arquivo.getName());
            response.setContentType("octet-stream");
            int BUFF_SIZE = 1024;
            byte[] buffer = new byte[BUFF_SIZE];
            response.setContentLength((int) arquivo.length());
            FileInputStream fis = new FileInputStream(arquivo);
            OutputStream os = response.getOutputStream();
            int byteCount = 0;

            do {
                byteCount = fis.read(buffer);
                if (byteCount == -1) {
                    break;
                }
                os.write(buffer, 0, byteCount);
                os.flush();
            } while (true);
        } finally {
        }
    }
D
CorreaThiago:
Olá douglasmanteiga.

Cara segui o seu código, mas meus parametros request, response vem nulos.

Na verdade segui outros tutoriais, mas acontece a mesma coisa. Sera que poderia me ajudar?

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            File arquivo = new File("C:\\Users\\Douglas Manteiga\\Documents\\aula08.pdf");
            response.setHeader("Content-Disposition", "attachment; filename = " + arquivo.getName());
            response.setContentType("octet-stream");
            int BUFF_SIZE = 1024;
            byte[] buffer = new byte[BUFF_SIZE];
            response.setContentLength((int) arquivo.length());
            FileInputStream fis = new FileInputStream(arquivo);
            OutputStream os = response.getOutputStream();
            int byteCount = 0;

            do {
                byteCount = fis.read(buffer);
                if (byteCount == -1) {
                    break;
                }
                os.write(buffer, 0, byteCount);
                os.flush();
            } while (true);
        } finally {
        }
    }

Então cara testei o código aqui funcionou...
Vc está passando o caminho certo do arquivo para o método File arquivo = new File("C:\\SEU CAMINHO");
Caso sim, exclui a Servlet crie uma nova e joga o código no método processRequest da forma que está em cima...
Obs: Ao criar a nova não mecha nos método doGet e doPost!
Abrço!

C
douglasmanteiga:
CorreaThiago:
Olá douglasmanteiga.

Cara segui o seu código, mas meus parametros request, response vem nulos.

Na verdade segui outros tutoriais, mas acontece a mesma coisa. Sera que poderia me ajudar?

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        try {
            File arquivo = new File("C:\\Users\\Douglas Manteiga\\Documents\\aula08.pdf");
            response.setHeader("Content-Disposition", "attachment; filename = " + arquivo.getName());
            response.setContentType("octet-stream");
            int BUFF_SIZE = 1024;
            byte[] buffer = new byte[BUFF_SIZE];
            response.setContentLength((int) arquivo.length());
            FileInputStream fis = new FileInputStream(arquivo);
            OutputStream os = response.getOutputStream();
            int byteCount = 0;

            do {
                byteCount = fis.read(buffer);
                if (byteCount == -1) {
                    break;
                }
                os.write(buffer, 0, byteCount);
                os.flush();
            } while (true);
        } finally {
        }
    }

Então cara testei o código aqui funcionou...
Vc está passando o caminho certo do arquivo para o método File arquivo = new File("C:\\SEU CAMINHO");
Caso sim, exclui a Servlet crie uma nova e joga o código no método processRequest da forma que está em cima...
Obs: Ao criar a nova não mecha nos método doGet e doPost!
Abrço!

[/quote]
Olá douglasmanteiga.

Fiz o que você me falou, mas nada ainda. Fiz assim.

Estou utilizando o framework Vraptor e tomcat7
Não sei o que fazer mais, já estou utilizando os jar's necessários, porem nada acontece.

[/quote]
protected void doGet4(HttpServletRequest request, HttpServletResponse response ) throws IOException{
		  
		 try {  
		  File file = new File("C:\\Users\\Samuel Alves\\Pictures\\upload\\download\\roots.jpg");
		  
		  response.setHeader("Content-Disposition", "attachment; filename="+ file.getName()); 
		  
		  response.setContentType("octet-stream"); 
		  
		  int BUFF_SIZE = 1024;  
	      byte[] buffer = new byte[BUFF_SIZE];  
		  
	      response.setContentLength((int) file.length());
	      
	      FileInputStream fis = new FileInputStream(file);  
	      
	      OutputStream os = response.getOutputStream(); 
	      
	      int byteCount = 0;
	      
	      do {  
	            byteCount = fis.read(buffer);  
	            if (byteCount == -1) {  
	                break;  
	            }  
	            os.write(buffer, 0, byteCount);  
	            os.flush();  
	        } while (true);  
	    } finally {  
	  
	 }

<form action="<c:url value="/download/downloadArquivo"/>" enctype="multipart/form-data" method="POST">
			<fieldset> 
				 	<legend>Download</legend>  
				 	<input type="file" id="arquivo" name="arq"/><br/>
				 	<button type="submit">Download</button> 
				 <br/>
			</fieldset>
		</form>
Criado 8 de agosto de 2012
Ultima resposta 9 de dez. de 2013
Respostas 5
Participantes 3