Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    2

    HELP!!! Link a file da jsp

    Salve a tutti
    Sto realizzando un'applicazione che deve scrivere un file excel e poi richiamarlo nel browser per permettere all'utente di scegliere se aprirlo o salvarlo.
    Nella classe java che elabora l'excel ho queste righe:

    codice:
                String path = session.getServletContext().getRealPath("Reports") + "/TabellaClienti.xls";
                path.replace('\\', '/');
                System.out.println(path);
                session.setAttribute("pathTabellaClienti", path);
                fos = new FileOutputStream(new File(path));
                workbook.write(fos);
    il file viene scritto e salvato e il suo path assoluto è salvato in sessione, poi in una jsp cerco di richiamarlo col suo path assoluto (file:///C/percorso), ci ho provato in vari modi:

    codice:
    <% 
        String pathTabellaClienti = (String) session.getAttribute("pathTabellaClienti");
        response.sendRedirect(response.encodeRedirectURL("file:///"+ pathTabellaClienti));
    %>
    e mi risponde "problemi di connessione"

    codice:
    OK
    ma il link non funziona, clicco e non succede niente, anche se nel browser mi appare, passando sul link, il percorso. Se invece inserisco il percorso direttamente nella barra degli indirizzi, tutto funziona perfettamente

    codice:
    <input type="button" value="Excel report" onclick="location.href='file:///C:/pathfile/TabellaClienti.xls'" />
    ed ottengo "autorizzazione negata"
    Qualcuno mi sa dire dove sto sbagliando???

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Una applicazione web non può dare accesso pubblico a risorse poste all'esterno della propria "area" (ovvero, al di fuori della root del web). Quindi no, non lo puoi fare così: o copi il file all'interno dell'area web e indichi nel link un URL congruente, oppure trasferisci il suo contenuto leggendo il file e inviandolo byte per byte in respose al client.

    Tra l'altro, specificando il protocollo "file://", fai sì che il client tenti un accesso al proprio file system, ma il file si trova sul tuo server... quindi non va bene in generale per client remoti.


    PS: il titolo non deve contenere epiteti inutili (come aiuto, help e quant'altro): lo sappiamo già da noi che necessiti di un aiuto, altrimenti non avresti postato.

    Il codice, poi, va postato all'interno degli appositi tag code.

    Tutto questo è scritto nel Regolamento interno.

    Ho sistemato io.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    2
    Ti ringrazio per la risposta e mi scuso per non aver letto il regolamento prima di postare.
    Ho capito il problema: devo salvare il file nell'area web. Come posso fare, visto che l'oggetto
    codice:
    new File(path)
    richiede un path assoluto dove salvare il file? C'è un modo per fornire un path relativo (che poi corrisponderà a un indirizzo sul server) a quest'oggetto?
    Grazie ancora

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Originariamente inviato da Cortes1
    Ti ringrazio per la risposta e mi scuso per non aver letto il regolamento prima di postare.
    Ho capito il problema: devo salvare il file nell'area web. Come posso fare, visto che l'oggetto
    codice:
    new File(path)
    richiede un path assoluto dove salvare il file? C'è un modo per fornire un path relativo (che poi corrisponderà a un indirizzo sul server) a quest'oggetto?
    Grazie ancora
    No, non c'è... ma c'è un modo per ottenere il path assoluto della Root del web (e tanto ti basta).

    L'oggetto ServletContext possiede il metodo getRealPath(String p) che prende come parametro un percorso virtuale (quello relativo alla tua applicazione, visibile dal web) e restituisce il percorso reale assoluto.

    Quindi, ad esempio:

    codice:
    // Ottengo il ServletContext
    ServletContext ctx = getServletContext();
    
    // Ottengo il percorso reale della root del web
    String percReale = ctx.getRealPath("/");
    A questo punto, puoi fare la copia/spostamento del file.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.