Pregunta: | 53041 - CONFIRMACIóN DESCARGA DE FICHEROS PEQUEñOSDESDE SERVLET JAVA |
Autor: | Francisco Carrasco Castillo |
Necesito saber como confirmar que se ha descargado correctamente un fichero. Para ficheros pequeños, se le envía el fichero al cliente mediante un servlet java y éste cree que ya lo ha aceptado antes de salir el diálogo correspondiente para guardarlo. Sin embargo, puede haberlo cancelado en el diálogo que aparece (Abrir, Guardar, cancelar). Esto no ocurre para ficheros más grandes ( a partir de 100 KB en adelante). Sabesi como controlarlo ?. Os envío un pequeño código de ejemplo. Gracias.
public void llamar2(String ruta, HttpServletResponse response, String nombreFichero) throws Exception { boolean txt = false; int leido; StringBuffer todo; int tamTotal = 0; OutputStream out = response.getOutputStream(); response.setContentType("application/x-download"); response.setHeader("Content-Disposition", "attachment; filename=" + nombreFichero); byte[] buffer = new byte[10240]; DataInputStream dis = new DataInputStream(new FileInputStream(ruta+nombreFichero)); leido = dis.read(buffer, 0, 10240); while (leido != -1) { System.out.println("Leido:" + leido); out.write(buffer, 0, leido); out.flush(); tamTotal += leido; leido = dis.read(buffer, 0, 10240); } dis.close(); out.flush(); out.close(); } |
Respuesta: | MARVIN CALLEJAS |
Cuando trabajas a nivel de bytes con comunicaciones asíncronas HTTP, lo recomendable es que incluyas dentro del ciclo while un thread de java (runnable), luego creas otro thread que vigile la pulsación de un usuario y cancele el ciclo que se realice al otro thread.
El tema de los subprocesos en java es algo complicado, así que tienes que leer algo de la documentación para que seas efectivo. |