Download text file in browser

3

I want to download a .txt file through my browser, what I have done so far is that the file is saved in a specific path, but I would like to download it through the browser to make it more comfortable for the user , here's the code I have so far:

StringBuilder line = new StringBuilder();
FileWriter fw = null;

$_Query="SELECT FROM PIEZAS";
rs1 = Gdr.consultar($_Query, 2);
String path = "C:/Users/Public/Downloads/";
java.util.Calendar fecha = java.util.Calendar.getInstance();
String fechafile=fecha.get(java.util.Calendar.DATE) + ""+ fecha.get(java.util.Calendar.MONTH)    + "" + fecha.get(java.util.Calendar.YEAR);
String fileName = "ArunicoERP_"+fechafile+".txt";
fw = new FileWriter(path + fileName);

if (qr == 1) {
    rs1 = Gdr.consultar($_Query, 2);
    String path = "C:/Users/Public/Downloads/";
    java.util.Calendar fecha = java.util.Calendar.getInstance();
    String fechafile=fecha.get(java.util.Calendar.DATE) + ""+ fecha.get(java.util.Calendar.MONTH)    + "" + fecha.get(java.util.Calendar.YEAR);
    //String fileName = "ArunicoERP_"+fechafile+".txt";
    String fileName = "ArunicoERP_.txt";
    fw = new FileWriter(path + fileName);
    while (rs1.next()) {
        line.append(rs1.getString("cuenta").toString());

        if ((rs1.getString("tipo_entrega").toString().equals("ER"))) {
            String Plaza = rs1.getString("plaza").toString();
            if (!Plaza.equals("N")) {
                line.insert(0, "3");
                line.append(rs1.getString("fecha").toString());
                line.append(rs1.getString("plazan").toString());
                line.append(endLine);
            } else {
                String test = rs1.getString("fecha").toString();
                line.append(test);
                line.append("000000");
                if (rs1.getString("parentezco").toString().equals("TI") || rs1.getString("parentezco").toString().equals("CO") || rs1.getString("parentezco").toString().equals("HI") || rs1.getString("parentezco").toString().equals("PA") || rs1.getString("parentezco").toString().equals("HE") || rs1.getString("parentezco").toString().equals("OT")) {
                    line.insert(0, "1");
                    line.append("001");
                } else if (rs1.getString("parentezco").toString().equals("VI") || rs1.getString("parentezco").toString().equals("AS") || rs1.getString("parentezco").toString().equals("SE") || rs1.getString("parentezco").toString().equals("AB") || rs1.getString("parentezco").toString().equals("CU") || rs1.getString("parentezco").toString().equals("PR") || rs1.getString("parentezco").toString().equals("SU") || rs1.getString("parentezco").toString().equals("TO")) {
                    line.insert(0, "1");
                    line.append("002");
                }
                //line.append(dbAppHelper.fieldValue("tipo_entrega_cat").toString());
                line.append(rs1.getString("visita").toString());
                line.append(rs1.getString("parentezco").toString());
                line.append(rs1.getString("nombre").toString().replace(".", " ").replace(",", " ").replace("{", " ").replace("}", " ").replace("/", " ").replace("*", " ").replace("-", " ").replace("_", " ").replace("+", " "));
                line.append(rs1.getString("identificacion").toString());
                line.append(rs1.getString("nidentificacion").toString());
                line.append(endLine);
            }
        } else if ((rs1.getString("tipo_entrega").toString().equals("DR")) || rs1.getString("tipo_entrega").toString().equals("DI")) {
            if ((rs1.getString("motivo_qp").toString().equals("21"))) {
                line.insert(0, "2");
                line.append(rs1.getString("fecha").toString());
                line.append("000000");
                line.append(rs1.getString("visita").toString());
                line.append("08");
                line.append(endLine);
            } else if ((rs1.getString("motivo_qp").toString().equals("22"))) {
                line.insert(0, "8");
                line.append(rs1.getString("fecha").toString());
                line.append(endLine);
            }
            else if (rs1.getString("motivo").equals("06")){ //nueva condicion
                line.insert(0,"8");
                line.append(rs1.getString("fecha").toString());
                line.append(endLine);
            }
            else {
                line.insert(0, "2");
                line.append(rs1.getString("fecha").toString());
                line.append("000000");
                line.append(rs1.getString("visita").toString());
                line.append(rs1.getString("motivo").toString());
                line.append(endLine);
            }
        } else if ((rs1.getString("tipo_entrega").toString().equals("EC"))) {
            line.insert(0, "1");
            line.append(rs1.getString("fecha").toString());
            line.append("000000003PV                                       ");
            line.append(endLine);
        }

        fw.append(line.toString());
        line.setLength(0);
        if (r == 0) {%>
            <tr bgcolor='white' ALIGN='CENTER'>
        <%
            r = 1;
        } else {
            r = 0;
        %>
            <tr bgcolor='#E6E6E6' ALIGN='CENTER'>
    <%  } %>
            </tr>
    <%
    }
    fw.close();
    Gdr.cerrar();
    out.print("Archivo se ha procesado");
}
    
asked by Jairo Ordaz Moreno 17.11.2016 в 20:51
source

3 answers

1

Remember that the servlet is just a program that builds the output of the HTTP server. So, you can indicate that it is a download and build the file on the fly (without touching the disk) in the output stream of the servlet, something like this:

         StringBuilder line = new StringBuilder();

             $_Query="SELECT FROM PIEZAS";
             rs1 = Gdr.consultar($_Query, 2);
                    java.util.Calendar fecha = java.util.Calendar.getInstance();
                    String fechafile=fecha.get(java.util.Calendar.DATE) + ""+ fecha.get(java.util.Calendar.MONTH)    + "" + fecha.get(java.util.Calendar.YEAR);
                    String fileName = "ArunicoERP_"+fechafile+".txt";

                    if (qr == 1) {
                    rs1 = Gdr.consultar($_Query, 2);
                    String path = "C:/Users/Public/Downloads/";
                    java.util.Calendar fecha = java.util.Calendar.getInstance();
                    String fechafile=fecha.get(java.util.Calendar.DATE) + ""+ fecha.get(java.util.Calendar.MONTH)    + "" + fecha.get(java.util.Calendar.YEAR);
                    //String fileName = "ArunicoERP_"+fechafile+".txt";
                    String fileName = "ArunicoERP_.txt";
                    //header, no puede haberse escrito nada en la salida antes de esto.
                    HttpServletResponse.setHeader("Content-Disposition", "attachment; filename=" + fileName);
                    //puedes poner otro mime-type si es lo que conviene
                    response.setContentType("text/plain");
                    //obtenemos el stream de salida.
                    OutputStream outStream = response.getOutputStream();


                    while (rs1.next()) {

                    line.append(rs1.getString("cuenta").toString());

                    if ((rs1.getString("tipo_entrega").toString().equals("ER"))) {
                        String Plaza = rs1.getString("plaza").toString();
                        if (!Plaza.equals("N")) {
                            line.insert(0, "3");
                            line.append(rs1.getString("fecha").toString());
                            line.append(rs1.getString("plazan").toString());
                            line.append(endLine);
                        } else {
                            String test = rs1.getString("fecha").toString();
                            line.append(test);
                            line.append("000000");
                            if (rs1.getString("parentezco").toString().equals("TI") || rs1.getString("parentezco").toString().equals("CO") || rs1.getString("parentezco").toString().equals("HI") || rs1.getString("parentezco").toString().equals("PA") || rs1.getString("parentezco").toString().equals("HE") || rs1.getString("parentezco").toString().equals("OT")) {
                                line.insert(0, "1");
                                line.append("001");
                            } else if (rs1.getString("parentezco").toString().equals("VI") || rs1.getString("parentezco").toString().equals("AS") || rs1.getString("parentezco").toString().equals("SE") || rs1.getString("parentezco").toString().equals("AB") || rs1.getString("parentezco").toString().equals("CU") || rs1.getString("parentezco").toString().equals("PR") || rs1.getString("parentezco").toString().equals("SU") || rs1.getString("parentezco").toString().equals("TO")) {
                                line.insert(0, "1");
                                line.append("002");
                            }
                            //line.append(dbAppHelper.fieldValue("tipo_entrega_cat").toString());
                            line.append(rs1.getString("visita").toString());
                            line.append(rs1.getString("parentezco").toString());
                            line.append(rs1.getString("nombre").toString().replace(".", " ").replace(",", " ").replace("{", " ").replace("}", " ").replace("/", " ").replace("*", " ").replace("-", " ").replace("_", " ").replace("+", " "));
                            line.append(rs1.getString("identificacion").toString());
                            line.append(rs1.getString("nidentificacion").toString());
                            line.append(endLine);
                        }
                    } else if ((rs1.getString("tipo_entrega").toString().equals("DR")) || rs1.getString("tipo_entrega").toString().equals("DI")) {
                        if ((rs1.getString("motivo_qp").toString().equals("21"))) {
                            line.insert(0, "2");
                            line.append(rs1.getString("fecha").toString());
                            line.append("000000");
                            line.append(rs1.getString("visita").toString());
                            line.append("08");
                            line.append(endLine);
                        } else if ((rs1.getString("motivo_qp").toString().equals("22"))) {
                            line.insert(0, "8");
                            line.append(rs1.getString("fecha").toString());
                            line.append(endLine);
                        } 
                        else if (rs1.getString("motivo").equals("06")){ //nueva condicion
                            line.insert(0,"8");
                            line.append(rs1.getString("fecha").toString());
                            line.append(endLine);
                        }
                        else {
                            line.insert(0, "2");
                            line.append(rs1.getString("fecha").toString());
                            line.append("000000");
                            line.append(rs1.getString("visita").toString());
                            line.append(rs1.getString("motivo").toString());
                            line.append(endLine);
                        }
                    } else if ((rs1.getString("tipo_entrega").toString().equals("EC"))) {
                        line.insert(0, "1");
                        line.append(rs1.getString("fecha").toString());
                        line.append("000000003PV                                       ");
                        line.append(endLine);
                    }

                    outStream.print(line.toString());
                    line.setLength(0);

                     Gdr.cerrar();
               }
               ouputStream.flush();
               ouputStream.close();
    
answered by 17.11.2016 в 21:24
1

Try the following code

FileInputStream archivo = new FileInputStream(path + fileName); 
int longitud = archivo.available();
byte[] datos = new byte[longitud];
archivo.read(datos);
archivo.close();

response. SetContentType("application/download"); 
response.setHeader("Content-Disposition","attachment;filename="+nFile);    

response.getOutputStream().write(datos);
response.getOutputStream().flush();
response.getOutputStream().close();

:

    
answered by 17.11.2016 в 20:57
1

It's easier with a Servlet, as shown below:

@WebServlet("/DownloadFile")
public class DownloadFile extends HttpServlet {

    private static final long serialVersionUID = 1L;
    private static final int BYTES_DOWNLOAD = 1024;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/plain");
            response.setHeader("Content-Disposition",
                             "attachment;filename=downloadname.txt");
            ServletContext ctx = getServletContext();
            InputStream is = ctx.getResourceAsStream("/testing.txt");

            int read=0;
            byte[] bytes = new byte[BYTES_DOWNLOAD];
            OutputStream os = response.getOutputStream();

            while((read = is.read(bytes))!= -1){
                os.write(bytes, 0, read);
            }
            os.flush();
            os.close();
    }
}

And the file you put in the WebContent folder:

    
answered by 17.11.2016 в 23:37