Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > FILE Download Class

Hola gente tengo una duda con un codigo que tengo, este codigo lo que hace es buscar dentro de una carpeta y descarga segun el filename el arhivo que le indicamos, lo que yo necesitaria es mandarle por html o jsp para descargar varios archivos dentro de esa carpeta y que el servlet reconozca cual es cual ... les paso el codigo ..

package com.web.ultimate.view.action;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.PrintWriter;

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

public class Download_Reports extends HttpServlet {
private static final long serialVersionUID = 1L;

protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String filename = "ULTIMATE_R111_3G_RF.xls.gz";
String filepath = "c:\\ULTIMATE_XML_ANALYZER\\";
response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition", "attachment; filename=\""
+ filename + "\"");

// use inline if you want to view the content in browser, helpful for
// pdf file
// response.setHeader("Content-Disposition","inline; filename=\"" +
// filename + "\"");
FileInputStream fileInputStream = new FileInputStream(filepath
+ filename);

int i;
while ((i = fileInputStream.read()) != -1) {
out.write(i);
}
fileInputStream.close();
out.close();
}


}

html

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>

Click on the link to download:
Download a File
-- OBJETIVO LOGRAR BAJAR OTROS ARCHIVOS DENTRO DEL PATH
Download a File
Download a File


</html>

octubre 26, 2016 | Unregistered CommenterMatias

Hola, la verdad que no estoy muy puesto en java EE pero intentaré darte una idea a ver si te vale.

Lo primero que deberías hacer, es convertir el nombre de fichero en algo variable que recogerás con GET, de esta manera:

En lugar de:

String filename = "ULTIMATE_R111_3G_RF.xls.gz";

pon:

String filename = request.getParameter("fichero");

Lo siguiente es crearte en tu HTML, alguna forma de que el usuario indique el nombre de los ficheros(con una lista multiple donde los seleccione, con checkboxes, o algo), esto es algo que debes currarte tu.

Lo siguiente, en el mismo HTML que llama a ese servlet, vas a crear un script en javascript, algo así:


<html>
<head>
<title>TODO supply a title</title>
<script type="text/javascript">
function descargaFicheros(){
//Aqui tendras que coger el nombre de los ficheros que el usuario haya //seleccionado, segun como lo hayas echo, los recogeras, si era una lista, si eran //checkboxes, si era un combo, lo que fuera, recoges el nombre de cada fichero indicado.

//Ahora aqui haras un bucle que recorra uno a uno los nombres de los ficheros.

//Finalmente, por cada nombre de fichero llamaras a tu servlet pasandole el nombre del fichero como parametro
window.open('NombreServlet?fichero='+nombreFichero);

}
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<BODY>
<div>Aqui la lista, o tabla donde se seleccionaran los archivos</div>
<A onClick="descargaFicheros()">Aqui el enlace que llama a la funcion javascript</A>
</BODY>
</html>

Esa es una forma, resumiendo, llamar al servlet 1 vez por cada archivo, pasándole el nombre de archivo. La verdad que es un poco cutre, ya que por cada fichero a descargar, te abre una pestaña del navegador, pero bueno, es valida. Supongo que habrá soluciones muchísimo mas elegantes.

Si tiene alguna duda, pues ya nos cuentas. Un saludo

octubre 26, 2016 | Registered Commenterloderain

Muchas gracias por responder, la verdad que estoy atorado en esto.... justamente lo que quiero hacer del lado del servlet es lo que tu me dices, String filename = request.getParameter("fichero"); ahora en la parte de HTML no me queda muy claro, yo tengo mi HTML que llama al servlet mediante un HREF="Download_Reports" , tambien tengo "id", "target" .... nose como pasar el parametro Fichero que me decis vos ....

octubre 26, 2016 | Unregistered CommenterMatias

Hola de nuevo, para pasar el nombre del fichero seria así:


<A href="Download_Reports?fichero=ULTIMATE_R111_3G_RF.xls.gz"> Texto del link</A>


y para recogerlo en el servlet, sería así:


String filename = request.getParameter("fichero");

Simplemente, tras el nombre del servlet, se añade el simbolo ?seguidoDeParesNombreValor, asi un ejemplo

Download_Reports?fichero=NombreDelfichero

Para poner varios separamos con &

Download_Reports?fichero1=NombreFich1&fichero2=NombreFich2&....

Prueba, y a ver que tal.

octubre 26, 2016 | Registered Commenterloderain

Muchas gracias era justo lo que necesitaba funciona a la perfección ...

octubre 26, 2016 | Unregistered CommenterMatias