Vorei realizzare una jsp che sia in grado di effettuare il download di un file che si trova su un server diverso da quello su cui si trova la mia jsp come posso fare?
grazie?
Vorei realizzare una jsp che sia in grado di effettuare il download di un file che si trova su un server diverso da quello su cui si trova la mia jsp come posso fare?
grazie?
Sarebbe più un compito da Servlet, che da JSP (le JSP dovrebbero solo occuparsi di visualizzare le informazioni, mai di elaborarle)... ad ogni modo, questo dovrebbe esserti utile:
Ciao.codice:FileOutputStream fos = new FileOutputStream( <dove_lo_salvo_e_con_che_nome> ); URL tuaURL = new URL( <indirizzo del file da scaricare> ); InputStream is = tuaUrl.openStream(); byte[] buffer = new byte[4096]; // Scaricare 4KB di dati alla volta ti va bene? int byteLetti = 0; while(byteLetti >= 0) { byteLetti = is.read( buffer ); fos.write(buffer, 0, byteLetti); } fos.close(); is.close();![]()
"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
Ti ringrazio
ma se volessi fare in modo che il file possa essere salvato sul computer client di chi si sta collegando come dovrei impostare il percorso di salvataggio?.
mi spiego meglio io mi collego al sito www.pippo.it su tale sito c'è una jsp che contiene il riferimentoa un file (esempio un pdf) che si trova su un altro server vorrei fare in modo che l'utente dal sito www.pippo.it possa scaricare il file nascondendo il sito da cui viene scaricato.
è possibile?
Glielo devi inviare in modo che all'utente compaia la classica finestrella per il download. A questo punto, però, non puoi più utilizzare una JSP, ma devi adottare la soluzione di una servlet.
Una JSP, infatti, invia al client un'intestazione per una pagina WEB, mentre tu devi inviare al client un'intestazione per un tipo di dato binario.
Il codice per l'invio di un file al client da servlet è il seguente:
Da notare che nomeFile è il nome del file che verrà visualizzato al client e propost come nome per il salvataggio (non necessariamente il nome fisico del file), mentre pathFile è il path fisico del file. Quindi, una soluzione senza troppe complicazioni, potrebbe essere quella di scaricare il file sul server in una determinata posizione, quindi inviarlo al client utilizzando quella posizione come path fisico.codice:response.setContentType("application/octet-stream; name=\"" + nomeFile + "\""); response.setCharacterEncoding("UTF-8"); response.addHeader("content-disposition", "attachment; filename=\"" + nomeFile + "\""); FileInputStream fis = new FileInputStream( pathFile ); byte[] dati = new byte[ fis.available() ]; fis.read( dati ); fis.close(); response.setContentLength( dati.length ); ServletOutputStream out = response.getOutputStream(); out.write( dati ); out.flush(); out.close();
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
concordo che sia meglio usare una servlet ma potresti usare anche una JSP usando un opportuno contentType. Un esempio? vedi http://faq.javaranch.com/java/JspAndExcel per generare un file excel (dove imposta il content type appropriato)
Ivan Venuti
Vuoi scaricare alcuni articoli sulla programmazione, pubblicati su riviste di informatica? Visita http://ivenuti.altervista.org/articoli.htm. Se vuoi imparare JavaScript leggi il mio libro: http://www.fag.it/scheda.aspx?ID=21754 !
Grazie per il vostro preziosissimo aiuto!!
Grazie al codice di Leleft e al suggerimento di ivenuti ho risolto in questo modo:
<%@ page import="java.io.*" %>
<%@ page import="java.net.*" %>
<%@ page import="java.lang.Object" %>
<%@page contentType="application/pdf" %>
<body>
<%
OutputStream o = response.getOutputStream();
URL prima=new URL("http://www.miosito.it/");
URL completo = new URL(prima,"esempio.pdf");
InputStream is = completo.openStream();
byte[] buffer = new byte[32 * 1024];
int byteLetti = 0;
while(byteLetti >= 0) {
byteLetti = is.read( buffer );
o.write(buffer, 0, byteLetti);
}
o.flush();
o.close();
is.close();
%>
in questo modo si apre la finestra di salvataggio del file pdf e rimane nascota la provenienza