[JSP] Download di file di (quasi) ogni tipo!

PiccolaAnimaBlu

Nuovo Utente
11 Giu 2010
10
0
0
Buon pomeriggio!
Esistono degli script per permettere il download di un file immagine o di un pdf da un sito web?
voglio che cliccando sul link si avvii il download e non l'apertura del file...
consigli?
ho visto che esiste una script in php, ma a me serve in jsp....
 

lespaul

Utente Attivo
30 Lug 2009
91
6
0
www.simplesoft.it
Ciao, dovresti creare una Servlet che definisce HttpResponse giusti per il download. Potresti postare il codice della parte dove dovrebbe venire il download?
 

PiccolaAnimaBlu

Nuovo Utente
11 Giu 2010
10
0
0
Codice:
<%@page contentType="text/html" pageEncoding="UTF-8" import="tredtube.*, java.util.* "%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
   "http://www.w3.org/TR/html4/loose.dtd">
<jsp:useBean id="utente" class="tredtube.LoginUtente" scope="session"/>
<jsp:useBean id="DBacademicproject" class="tredtube.DatabaseAcademicProject" scope="application"/>

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Book of academic project</title>
        <link rel="stylesheet" type="text/css" href="css/stile.css"/>
        <script type="text/javascript" src="js/jquery-1.3.2.js"></script>
        <script type="text/javascript" src="js/myfunc.js"></script>
    </head>
    <body>
        <!-- per vedere tutti i progetti accademici simile a book o researcher-->
        <!-- qui mettiamo il div con l'intestazione -->
        <div class="intestazione">
            <jsp:include page="viewIntestazione.jsp"/>
        </div>

        <!-- qui mettiamo i diversi div per la barra di navigazione-->

            <div class="navigationbar">
            <jsp:include page="viewNavigationBar.jsp"/>
            </div>
            <div class="login">
            <jsp:include page="viewLogin.jsp"/>
            </div>

            <div class="titolocentrato">
                Book of academic project
            </div>
            <div class="centrato">
                <%//prendo gli academic project da database
              ArrayList<AcademicProject> academicproject = DBacademicproject.getAcademicProject();
              if(academicproject.size()>0){

                  //prendo il numero della pagina che sto visualizzando
                  String pageN= request.getParameter("pageNum");
                  int pageNum = 1;
                  if(pageN==null || pageN.length()==0){
                  pageNum = 1;
                  }
                  else{
                    pageNum= Integer.parseInt(pageN);
                  }

                  //variabile di inzio e fine del for
                  int inizio=0;
                  int fine=10;
                  if(fine>academicproject.size()){
                    fine =academicproject.size();
                  }
                  if(pageNum==1){
                  inizio=0;
                  }
                  else{
                  inizio=(pageNum-1)*10;
                  fine= pageNum*10;
                  //se la fine supera la size, allora size è la fine
                  if(fine>academicproject.size()){
                    fine = academicproject.size();
                  }
                  }


            %>
            <table border="0" cellspacing="15" width="100%">
                   <thead>
                        <tr>
                            <th width="20%">Username</th>
                            <th width="20%">Title</th>
                            <th width="20%">Description</th>
                            <th width="20%"> Reference </th>
                            <th width="20%"> Link </th>
                        </tr>
                    </thead>
                    <tbody>
                        <%
                            for(int i=inizio; i<fine; i++){
                            String background = "";
                            if(i%2==0){
                             //è pari
                            background="#8F8F8F";
                             }
                        %>
                        <tr bgcolor="<%=background%>">
                               <td width="20%" align="center"><a href="viewProfiloUtente.jsp?username=<%=academicproject.get(i).getUsername() %>"><%=academicproject.get(i).getUsername() %></a></td>
                                <td width="20%" align="center"><%=academicproject.get(i).getTitolo()%></td>
                                <td width="20%" align="center"><%=academicproject.get(i).getDescrizione() %></td>
                                [B]<td width="20%" align="center"><a href="<%=academicproject.get(i).getRiferimento()%>" target="_blank">Download</a></td>[/B]
                                <td width="20%" align="center"><a href="<%=academicproject.get(i).getLink()%>"><%=academicproject.get(i).getLink()%></a></td>
                            </tr>

                            <%}%>
                    </tbody>

                </table>

                    <!-- controls pagina -->

                            <div align="center" id="controls" >
                                <div class="prev"><a href="viewBookOfAcademic.jsp?pageNum=<%
                                                            if(pageNum>1){
                                                            out.print(pageNum-1);
                                                            }
                                                            %>">PREV</a></div>

                                                            <div>  <%
                            int numeroPagine = (int)(academicproject.size()/10)+1;
                            String style="";
                            if(numeroPagine>1){
                            for(int i = 0; i<numeroPagine; i++){

                            if((i+1)==pageNum){
                            style="font-weight:bold; font-size:24px;";
                            }
                            else{
                            style="";
                            }
                            %>
                            <a href="viewBookOfAcademic.jsp?pageNum=<%=i+1%>"><span style="<%=style%>"><%=(i+1)%></span></a>
                            <%
                            }
                            }

                        %></div>

                        <div class="next"> <a href="viewBookOfAcademic.jsp?pageNum=<%
                                                            if(pageNum<numeroPagine){
                                                            out.print(pageNum+1);
                                                            }
                                                            else{
                                                            out.print(pageNum);
                                                            }
                                                            %>">NEXT</a></div>
                    </div>
            <!-- fine controls pagina -->
                    <p>Signal your academic project <a href="viewAcademicProject.jsp?stato=academic project">here</a></p>
                <%}
                    else{out.print("We don't have any academic project!");}
                %>

            </div>
                 <!--qui c'è il footer -->
            <div class="footer">
             <jsp:include page="viewFooter.jsp"/>
             </div>
    </body>
</html>

la parte in grasetto è il download. prendo dal database il percorso del file, senza aggiungere altri tag specifici
 

lespaul

Utente Attivo
30 Lug 2009
91
6
0
www.simplesoft.it
Duqnue, dovresti gestire tutto da Servlet. Ti spiego, ti crei una Servlet magari la chiami ServletDownload dove per qualsiasi download gli accodi il path del file che deve scaricare.
Qui ti posto una servlet per un file .zip, per un'altro tipo di file basta modificare gli header,
comuqnue il meccanismo principale è questo. Il codice della Servlet:
Codice:
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        String path = request.getAttribute("file").toString();
        //Apro il file
        FileInputStream inStream = new FileInputStream(path);
        
        //Setto gli header della risposta per il download ZIP (in questo caso)
        response.setContentType("application/zip");
        response.setContentLength(inStream.available());
        response.addHeader("Content-Disposition", "attachment; filename="+path);
        response.addHeader("Content-Transfer-Encoding", "binary");
        response.addHeader("Content-Description", "File Transfer");


        //Leggo il file
        byte [] data = new byte[inStream.available()];
        inStream.read(data);

        //Apro lo stream per avviare il download
        ServletOutputStream out = response.getOutputStream();
        out.write(data);//Invio il file
        out.flush();
        out.close();
    }
Ora quando dovrai scrivere il link del download basta fare cosi:
Codice:
<a href="http://www.mioserver.it/ServletDownload?file=miofile.zip">Scarica file</a>

Il codice non l'ho purtroppo testato, potrebbe esserci qulache errore, facci sapere

Ciao
 

lespaul

Utente Attivo
30 Lug 2009
91
6
0
www.simplesoft.it
Ciao Alessandro, grazie, si certo sicuramente, la Servlet l'ho fatta al volo giusto per far capire un modo per procedere. Se lasciata in questo modo se ne potrebbero combinare di tutti i colori :).
Si potrebbe fare un query in un database che contiene i possibili file che si possono scaricare, altrimenti un bel 403 Forbidden.
Meno male che qualcuno ci richiama alla 'sicurezza' altrimenti poveri noi :crying:

Grazie

Ciao
 

PiccolaAnimaBlu

Nuovo Utente
11 Giu 2010
10
0
0
Grazie mille per le risposte....
ma ho ancora due domandine:
1) come faccio nella servlet a distinguere i diversi tipi di file (pdf, jpg, ecc) e cambiare gli header?
2) alessandro, mi puoi dire un esempio di controllo sul percorso?
 
Discussioni simili
Autore Titolo Forum Risposte Data
R autocompletamento textBox da DB con JSP Ajax 4
A Caricare una pagina jsp in un div alla pressione di un button Javascript 1
S problema cookie con jsp HTML e CSS 0
A Comparazione tra Php e jsp? PHP 3
T Report di stampa per pagine JSP Java 0
F Problema selezione dinamica select/jsp/mysql Javascript 0
G conteggio pagine e visite utenti jsp HTML e CSS 0
L [tomcat 7] JSP e importazione jar esterni Apache 0
G Collegamento tra pagine jsp tramite 2 bottoni diversi Java 1
A [json+jsp+j2ee]select jsp carica valori al onchange di un altra select Java 1
A struts2 + jsp + modal popup Java 2
M [JSP]Problemi nel salvare nel db Java 2
M [JSP]Esempio Book Java 13
S "Visualizzatore" in HTML + JSP Javascript 3
D [JSP] Gestire eccezioni relative alla scadenza delle sessioni Java 0
P [JSP] Upload Immagine Java 0
M [JSP] Problema cookie Java 0
codesurfer [JSP] POST tra JSP e PHP Java 1
P [JSP] Integrazione PayPal Java 3
L ajax e pagine .jsp Ajax 1
codesurfer [Java] [JSP] errore in lettura XML (Content is not allowed in prolog.) Java 4
T jsp e dbms MySQL 4
S validazione pagina jsp HTML e CSS 2
M JSP - JAVA : Scrittura su file.xml come fare? Help! Java 1
B jsp distinct Javascript 0
B passare una variabile javascript ad una jsp Javascript 0
B Per chi conosce JSP Javascript 5
L [Java] Problemino con JSP Java 0
C 10GB Free Hosting ASP/PHP/JSP/FTP MYSQL/MSSQL Hosting 0
M [JSP] Differenziare valori Classic ASP 0
L [JSP] fine di una Servlet Programmazione 1
J JSP:Riconoscere la lingua Javascript 0
A Conn. database con JSP Javascript 1
A Conn. database con JSP MS Access 0
4 chat jsp Programmazione 1
S checkbox e radiobotton collegati tra loro in jsp Programmazione 3
M Creare traccia di download file sul server HTML e CSS 2
D rotella di caricamento che si toglie quando parte il download Ajax 0
M user agent per il download di api PHP 0
S Download di un file in automatico dopo la sua creazione PHP 2
R Download file multipli da directory php PHP 0
atipika INSERIRE ICONE DOWNLOAD E STAMPA WORDPRESS WordPress 10
D Javascript per il download dei dati Javascript 0
G download di un template HTML e CSS 1
V Servizio design pagina web e download in self contained html file Discussioni Varie 1
MarcoGrazia [PHP] Download di file con errore all'interno. PHP 1
C [PHP] Problema con download file PHP 0
T [PHP] [Javascript] Download e contatore PHP 3
giosuecentomani redirect form a pagina html download ebook HTML e CSS 2
spider81man [PHP] Pulsante SUBMIT per download diretto dei file PHP 9

Discussioni simili