Download de arquivo com url externa

Olá, eu sei como colocar um link em minhas páginas para o usuário fazer download de um arquivo que esteja na minha máquina local.

Porém o documento que quero disponibilizar está disponível em outra máquina, com uma url externa (exemplo http://www.url.com.br/documento.pdf). Atualmente estou mandando um redirect (como abaixo) através do jsf para a página com o pdf, porém eu gostaria que ao invés de redirecionar o usuário para outra página, o browser já abrisse a opção de fazer download imediatamente.

ExternalContext ec = FacesContext.getCurrentInstance().getExternalContext(); ((HttpServletRequest) ec.getRequest()).logout(); ec.redirect("http://www.url.com.br/documento.pdf");

Alguém poderia me dar uma dica de como fazer isso?

Obs. Eu já tentei o http://www.primefaces.org/showcase/ui/fileDownload.jsf do primefaces, porém não consegui fazê-lo funcionar para pegar o arquivo de fontes externas.

Bom Dia, faço algo similar numa aplicação desktop …

Tenho que conectar no web service da Google para recuperar um .xml … segue trecho do código utilizado para conexão … Você teria que ler o arquivo e reescreve-lo … tem que ver se é viável ou não …

                              [code] URL oracle;

	try {

		oracle = new URL("http://maps.google.com/maps/api/geocode/xml?address="+cep+"+" + imovel + "+" 
				+ tipoLogradouro + "+" + logradouro + "+" + cidade +  "%20-%20PA,+BR&sensor=true");

	
	  //System.out.println(oracle);
	  URLConnection yc = oracle.openConnection();
        BufferedReader in = new BufferedReader(
                                new InputStreamReader(
                                yc.getInputStream()));
        
        
        String inputLine;
        
        //Le Buffer do XML Google
        while ((inputLine = in.readLine()) != null) {,
		//...
	  }[/code]

No JSF eu crio um arquivo com ByteArrayOutputStream para download … Tente agrupar o código desktop acima e a solução web abaixo …

[code] ExternalContext context = FacesContext.getCurrentInstance().getExternalContext(); // Context
HttpSession session = (HttpSession) context.getSession(false);
ByteArrayOutputStream outStream = new ByteArrayOutputStream();

           //...

            //Passando Parametros via Sessao
            session.setAttribute("arquivo", outStream);
            session.setAttribute("nomeFile", "arquivo.dxf");
            session.setAttribute("formato", "dxf");

           redirect("/DownloadServlet");


    protected void redirect(String page) {

    ExternalContext context = FacesContext.getCurrentInstance().getExternalContext();

    try {
        context.redirect(context.getRequestContextPath() + page);
    } catch (IOException ex) {
    }

   }[/code]

Minha Servlet …

[code]import java.io.ByteArrayOutputStream;
import java.io.IOException;
import javax.faces.bean.SessionScoped;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
*

  • @author cleyson
    */
    @WebServlet(name = “DownloadServlet”, urlPatterns = {"/DownloadServlet"})
    @SessionScoped
    public class DownloadServlet extends HttpServlet {
    private static ServletOutputStream outStream;

    /**

    • @return the outStream
      */
      public static ServletOutputStream getOutStream() {
      return outStream;
      }

    /**

    • @param aOutStream the outStream to set
      */
      public static void setOutStream(ServletOutputStream aOutStream) {
      outStream = aOutStream;
      }

    /**

    • @return the outStream
      */

    protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    ServletOutputStream ouputStream = null;

     try{                         
         
             HttpSession session = request.getSession(true); 
    
             response.setContentType("application/octet-stream"); 
             response.addHeader("Content-Disposition", "attachment; filename=\"" + session.getAttribute("nomeFile") + "\";"); 
             response.setContentType((String) session.getAttribute("formato")); //Tipo do Arquivo 
                    
                                      
             //Recuperando os parâmetros enviados
             ByteArrayOutputStream file = (ByteArrayOutputStream)session.getAttribute("arquivo");
    
             byte bytes[] = null;
             
             bytes = file.toByteArray(); 
             response.setContentLength(bytes.length);                                
             ouputStream = response.getOutputStream();  
             ouputStream.write(bytes, 0, bytes.length);                            
             ouputStream.flush();
    
          
      }catch(Exception e){
          e.printStackTrace();         
      }finally {
         
         if (ouputStream != null)
             ouputStream.close();
         
      }
    

    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    processRequest(request, response);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    processRequest(request, response);
    }

    @Override
    public String getServletInfo() {
    return “Short description”;
    }//

} [/code]

Tenta juntar todas essas idéias e tirar a sua solução/conclusão …

Vlw CLEYSON, vou tentar fazer algo aqui baseado nas suas ideias.