sei sicuro di settare alcuni parametri correttamentre tipo il content-type o il content-disposition?
Io ho un'applicazione java che crea un file excel e poi lo spedisce al client, da cui è possibile fare il salvataggio in locale o l'apertura.
Il codice è:
alla fine faccio il forward verso una servlet, il cui metodo service esegue questo codice (il codice è parametrizzato, perchè questa servlet di dowload nella mia applicazione fa il download di diversi tipi di file, non solo excel: per questo motivo non è stato messo tutto dentro una unica classe: se tu non hai problemi di generalizzazioni puoi fare tutto in un unica classe.codice:public void sendOutput(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{ request.setAttribute("Content-disposition", "attachment; filename=" +"Report_CUR.xls" ); request.setAttribute("Content-type", "application/xls"); request.setAttribute("pathname", ""); request.setAttribute("filename", fileTemp.getAbsolutePath()); request.getRequestDispatcher("/servlet/Download").forward(request, response); }
la parte di codice importante è essenzialmentecodice:public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException { try { String contentDisposition = (String)request.getAttribute("Content-disposition"); String contentType = (String)request.getAttribute("Content-type"); if(contentType == null) contentType = request.getParameter("conttype"); if(contentDisposition == null) contentDisposition = request.getParameter("contdisp"); // Regola per reperire il file - priorita' di ricerca file // 1° - parametri fileName e pathName da forwarding di altre servlet // 2° - parametri ricevuti via http da link diretti // 3° - informazione contenuta nell'indirizzo con cui e' chiamata // la servlet (es. /c:/ftp/file.pdf) vedi <servletmapping> in // web.xml String pathName = null; String fileName = (String)request.getAttribute("filename"); // da forwarding ? if(fileName == null) fileName = request.getParameter("filename"); // parametro di link o form ? if(fileName == null) { fileName = request.getServletPath(); // address mapping ? pathName = ""; // in questo caso ho anche il path } else { /* in caso di forwarding o parametri devo reperire il path */ pathName = (String)request.getAttribute("pathname"); if(pathName == null) pathName = request.getParameter("pathname"); if(pathName == null) pathName = ""; if(pathName.length() > 0) pathName += (pathName.endsWith("\\") || pathName.endsWith("/") ? "" : "\\"); } String canName = pathName + fileName; System.out.println("canName-"+canName); File fTemp = new File(canName); if (fTemp.exists() && fTemp.length()>0){ //response.setContentLength((int)fTemp.length()); if(contentType != null) response.setContentType(contentType); else response.setContentType("application/pdf"); if(contentDisposition != null) response.setHeader("Content-disposition", contentDisposition); else response.setHeader("Content-disposition","attachment; filename=" +"WPDReport.pdf" ); ServletOutputStream out = response.getOutputStream(); FileInputStream fis = new FileInputStream(fTemp); int letti = 0; byte[]buf = new byte[10000]; do { letti = fis.read(buf, 0, buf.length); if(letti > 0) out.write(buf, 0, letti); } while(letti == buf.length); fis.close(); out.flush(); if(request.getAttribute("delete") != null || request.getParameter("delete") != null) fTemp.delete(); } } catch(Exception e) { ourLog.debug("Download:service-", e); } }
spero di esserti stato d'aiuto e di non averti ulteriormente incasinato le idee.codice:ServletOutputStream out = response.getOutputStream(); FileInputStream fis = new FileInputStream(fTemp); int letti = 0; byte[]buf = new byte[10000]; do { letti = fis.read(buf, 0, buf.length); if(letti > 0) out.write(buf, 0, letti); } while(letti == buf.length); fis.close(); out.flush();
ciao
![]()

Rispondi quotando