Download de arquivos em uma pagina richfaces

10 respostas
V

Olá no richfaces eu utilizo a tag rich:fileUpload para fazer uploads de arquivos, existe alguma tg para eu utilizar no jsf para download de arquivos ?

Abraço

10 Respostas

G

Faz um Servlet

@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {

		resp.setContentType("audio/mpeg3"); //no caso aqui arquivo em mp3 nesse site aqui tem mais 
                 //http://reference.sitepoint.com/html/mime-types-full
		
               byte[] arquivo = // busca o arquivo que você quer  

              resp.getOutputStream().write(arquivo);
	}

e na pagina:
<a href="<link para o servlet>">Download<a>
V

gustavorozolin mais esse servelet funciona em paralelo com jsf , javabens ?

pois o valor do link vai estar no java bean

abraço

G

Sim, tranquilo eu tenho aqui um projeto usando JSF 2 e tenho servlet para exibir imagens (byte[]) quer foram gravadas no banco e funciona tudo perfeitamente.

V

cara eu nunca mexi com Servelet, como eu poderia integrar ele com o jsf ?
por exemplo, o arquivo que eu tenho que baixar ele não é fixo, quando se faz a uma consulta o nome do arquivo que tenho que baixar fica num JavaBean, como eu faço o javaBean se comunicar com o servelet para passar qual arquivo tem que se baixar? eu tb preciso definir ele num faces-config? :oops:

vlw

G

Vamos lá para receita do bolo
no seu web.xml fica assim:

<servlet>
<servlet-name>Download</servlet-name>
<servlet-class>br.com.meunome.NomeDaClasse</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Download</servlet-name>
<url-pattern>/arquivo/*</url-pattern>
</servlet-mapping>

classe

package br.com.meunome;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name="Download",urlPatterns = "/arquivo/*") // caso esteje usando jsf dois colocar isso aqui da não precisa da configuração no web.xml
public class NomeDaClasseextends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = -2566545557128926255L;
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {

		resp.setContentType("audio/mpeg3");

             String parametro = req.getParameter("nomeArquivo")); // aqui voce consegue pegar o nome do arquivo que vc deseja baixar


                byte[] b = //aqui vc coloca o codigo que busca o arquivo(byte[])  com o parametro passado na url 
		resp.getOutputStream().write(b);
	}
}

dai na sua pagina vc faz assim

<a href="/arquivo/<nomeQueVcQuizer>.<extencao>?nomeArquivo=#{meuBean.nomeArquivo}">Download<a>

Qualquer duvida estou a disposição
Abraço

V

e ai gustavorozolin

cara nessa parte

<a href="/arquivo/<nomeQueVcQuizer>.<extencao>?nomeArquivo=#{meuBean.nomeArquivo}">Download<a>

o seria algo como isso ?

vlw

G

sim :smiley:

V

e ai gustavorozolin vou tentar explicar o erro, eu criei o link e quando clico nele ele acessa esse link com o seguinte erro

http://localhost/arquivo/<Download>.<jpeg>?nomeArquivo=‘Creek.jpeg’

HTTP Status 404 - /arquivo/%3CDownload%3E.%3Cjpeg%3E

type Status report

message /arquivo/%3CDownload%3E.%3Cjpeg%3E

description The requested resource (/arquivo/%3CDownload%3E.%3Cjpeg%3E) is not available.

JBossWeb/2.0.0.GA_CP

o endereço antigo era:
http://localhost/portal/portal/default/Operacao/Projeto2/Projeto2

JSP: (coloquei o nome estatico so para teste)

<a href="/arquivo/<Download>.<jpeg>?nomeArquivo='Creek.jpeg'">Download</a>

o servelet:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import javax.servlet.ServletException;
//import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//@WebServlet(name="Download",urlPatterns = "/arquivo/*") // caso esteje usando jsf dois colocar isso aqui da não precisa da configuração no web.xml
public class Download extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = -2566545557128926255L;
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {

		resp.setContentType("image/jpeg");

		String parametro = req.getParameter("nomeArquivo"); // aqui voce consegue pegar o nome do arquivo que vc deseja baixar

		FileInputStream file = new FileInputStream(new File("C:\\Sun\\jboss-soa-p.4.3.0\\jboss-as\\server\\development\\deploy\\"+parametro));
		
        byte[] b = null;
        file.read(b);//aqui vc coloca o codigo que busca o arquivo(byte[])  com o parametro passado na url 
        resp.getOutputStream().write(b);
	}
}

web xml

....

	<servlet>
		<servlet-name>Faces Servlet</servlet-name>
		<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping> 
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>/faces/*</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>             
		<url-pattern>*.resource</url-pattern>
	</servlet-mapping>
	
	<servlet>
		<servlet-name>Download</servlet-name>
		<servlet-class>alive.Download</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>Download</servlet-name>
		<url-pattern>/arquivo/*</url-pattern>
	</servlet-mapping>
....
V

Não consegui resolver ainda

G

victormenegusso:
e ai gustavorozolin vou tentar explicar o erro, eu criei o link e quando clico nele ele acessa esse link com o seguinte erro

http://localhost/arquivo/<Download>.<jpeg>?nomeArquivo=‘Creek.jpeg’

HTTP Status 404 - /arquivo/%3CDownload%3E.%3Cjpeg%3E

type Status report

message /arquivo/%3CDownload%3E.%3Cjpeg%3E

description The requested resource (/arquivo/%3CDownload%3E.%3Cjpeg%3E) is not available.

JBossWeb/2.0.0.GA_CP

o endereço antigo era:
http://localhost/portal/portal/default/Operacao/Projeto2/Projeto2

JSP: (coloquei o nome estatico so para teste)

<a href="/arquivo/<Download>.<jpeg>?nomeArquivo='Creek.jpeg'">Download</a>

o servelet:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import javax.servlet.ServletException;
//import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//@WebServlet(name="Download",urlPatterns = "/arquivo/*") // caso esteje usando jsf dois colocar isso aqui da não precisa da configuração no web.xml
public class Download extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = -2566545557128926255L;
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {

		resp.setContentType("image/jpeg");

		String parametro = req.getParameter("nomeArquivo"); // aqui voce consegue pegar o nome do arquivo que vc deseja baixar

		FileInputStream file = new FileInputStream(new File("C:\\Sun\\jboss-soa-p.4.3.0\\jboss-as\\server\\development\\deploy\\"+parametro));
		
        byte[] b = null;
        file.read(b);//aqui vc coloca o codigo que busca o arquivo(byte[])  com o parametro passado na url 
        resp.getOutputStream().write(b);
	}
}

web xml

....

	<servlet>
		<servlet-name>Faces Servlet</servlet-name>
		<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet-mapping> 
		<servlet-name>Faces Servlet</servlet-name>
		<url-pattern>/faces/*</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>Faces Servlet</servlet-name>             
		<url-pattern>*.resource</url-pattern>
	</servlet-mapping>
	
	<servlet>
		<servlet-name>Download</servlet-name>
		<servlet-class>alive.Download</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>Download</servlet-name>
		<url-pattern>/arquivo/*</url-pattern>
	</servlet-mapping>
....

Ola,
faltou vc popular o seu byte[] (“b”) antes de mandar a resposta no servlet.

Criado 22 de fevereiro de 2011
Ultima resposta 14 de mar. de 2011
Respostas 10
Participantes 2