Pregunta sobre spring-mvc, jsp, download, java – ¿Cómo descargar el archivo de url usando Spring MVC?

2

Tengo una opción de descarga en mi jsp como esta

<a href='<c:url value="/licensing/download.sp?name=${namelist.name}&downloadUrl=${namelist.url}"/>'>

<img src="/images/download.gif" alt="Download" border="0" align="right">

En la "url" anterior se encuentra la ubicación del archivo y el nombre es el nombre del archivo. Al hacer clic en la opción de descarga en jsp iam, se llama al método del controlador, en el controlador

public ModelAndView download(HttpServletRequest request, HttpServletResponse response, DevTechBean devTechBean) throws Exception {
        cat.debug("MySuiteListController: download: begin");
        ModelAndView modelView = super.handleLicensingRequest(request, response);
        String name = request.getParameter("name");

        String url1 = request.getParameter("downloadUrl");
        cat.debug(" download: url ="+url1);

        String downloadurl1="https://my.net:8869"+url1;
        cat.debug(" download: downloadurl ="+downloadurl1);
    try{
        URL url = new URL(downloadurl1);  
        //response.setHeader("Content-Type", "text/csv");  
        response.setHeader("Content-disposition", "attachment;filename="+name);
        URLConnection connection = url.openConnection();
        InputStream stream = connection.getInputStream();
        BufferedOutputStream outs = new BufferedOutputStream(response.getOutputStream());
        int len;
        byte[] buf = new byte[1024];
        while ((len = stream.read(buf)) > 0) {
          outs.write(buf, 0, len);
        }
        outs.close();
    }
    catch (MalformedURLException e) { 
        cat.error("Error occurrred in url");

    } 
    catch (IOException e) { 
        cat.error("Error occurrred ");

    }
        String viewName = "swl_download";
    modelView.setViewName(viewName);
return modelView;       

}

Pero cuando hago clic en descargar, obtengo una excepción de archivo no encontrado. Estoy pensando que el problema se debe al valor de la url. En el iam anterior tiene valor de downloadurl = / files / download / hai.txt

cuando doy

<a href="${namelist.url}"/>
<img src="/images/download.gif" alt="Download" border="0" align="right"></a><br/><br/></td>

Al hacer clic, el archivo se abre en el navegador con la URL.https://my.net:8869//files/download/hai.txt(but aquí para href iam que proporciona solo este enlace "/files/download/hai.txt" no sé cómo está llegando el enlace completo.

pero si da un enlace como este para llamar al controlador para abrir ese archivo como emergente.

<a href='<c:url value="/download.sp?name=${namelist.name}&downloadUrl=${namelist.url}"/>'>

Se está obteniendo el archivo de excepción no encontrada. Creo que es debido que descargue Url.so he agregado como esto arriba

String downloadurl1="https://my.net:8869"+url1;

Pero estoy recibiendo el archivo no encontrar la excepción. Por favor, ayúdame a resolver esto.

¿No te estás perdiendo el contexto? (licencia comomy.net:8869/licensing / ...) Francisco Spaeth
No hagas estocatch (IOException e) { cat.error("Error occurrred "); }, hace que la depuración sea imposible. En lugar de eso, hazlo como unRuntimeException, o al menos imprimir el seguimiento de la pila. artbristol
Ver mi respuesta a continuación. @ Rahul Ved
@jerry: cómo lo implemento de acuerdo a mis necesidades Rahul

Tu respuesta

2   la respuesta
1

Prueba esto:

@RequestMapping(value="/viewAttach", method = RequestMethod.GET)
public ModelAndView viewAttach(@RequestParam(value="article_id", required = true) String article_ref, HttpSession session, HttpServletResponse response) 
{

    /* *** Check Session *** */
    try {

        // Direclty from pier.content.GetContent written by ang94402

        URL url = new URL(binaryURL);           
        response.setHeader("Content-disposition", "attachment;filename=" + binary.getName());

        //Set the mime type for the response
        response.setContentType("application/pdf");

        // URLConnection connection = url.openConnection();
        InputStream is = url.openStream();

        BufferedOutputStream outs = new BufferedOutputStream(response.getOutputStream());
        int len;
        byte[] buf = new byte[1024];
        while ( (len = is.read(buf)) > 0 ) {
            outs.write(buf, 0, len);
        }
        outs.close();

    } catch (MalformedURLException e) {
        logger.error("Error ModelAndView.viewMain - MalformedURLException : " + e.toString() + " -- " + e.getStackTrace()[0].toString());
        return null;
    } catch (IOException e) {
        logger.error("Error ModelAndView.viewMain - IOException : " + e.toString() + " -- " + e.getStackTrace()[0].toString());
        return null;
    }


    return null;

}
0

Esto es sólo un pseudo código. Cambiarlo según sus necesidades.

 InputStream is = getClass().getResourceAsStream("filename");

Primero trate de averiguar que getClass () apunta a qué directorio. (¿No está seguro, pero debería ser el INICIO de su aplicación?). A continuación, coloque su archivo en la misma ubicación, si no es así.

Espero que esto ayude.fuente

Preguntas relacionadas