Foro sobre Java SE > FILE Download Class
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
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 ....
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.
Muchas gracias era justo lo que necesitaba funciona a la perfección ...
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>