Forum by laureateci.it
[ Home | REGOLE FORUM | Tutti i blog | Profilo | Registrati | CHAT | Discussioni Attive | Discussioni Recenti | Segnalibro | Msg privati | Sondaggi Attivi | Utenti | Download Informatica | Download ICD | Download TPS | Download Magistrale | Download Specialistica | Giochi | Cerca nel web | cerca | faq | RSS ]
Nome Utente:
Password:
Salva Password
Password Dimenticata?

 Tutti i Forum
 Cultura Informatica
 Corso di java
 Servlet Upload Progress Bar
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
I seguenti utenti stanno leggendo questo Forum Qui c'è:
Autore Discussione Precedente Discussione Discussione Successiva  

comm64
Utente giovane


Regione: Puglia
Prov.: Foggia


Inserito il - 22/12/2008 : 16:44:16  Mostra Profilo  Visita l'Homepage di comm64 Invia a comm64 un Messaggio Privato  Rispondi Quotando
Salve gente,
tramite degli esempi su internet sono riuscito a creare la mia servlet con relativa pagina JSP per l'upload di file. Vorrei sapere se fosse possibile includere una progress bar nella pagina di upload che mi indichi sullo stato della transazione.
Vi allego il mio codice:
SERVLET:
codice:

import com.oreilly.servlet.*;

//~--- JDK imports ------------------------------------------------------------

import java.io.*;

import javax.servlet.*;
import javax.servlet.http.*;

public class ControllerFiles extends HttpServlet
    {
    public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
        {
        // Istanziamo le variabili
        // Il ServletContext sevirà per ricavare il MIME type del file uploadato
        ServletContext context = getServletContext();
        String         forw    = null;

        try
          {
            // Stabiliamo la grandezza massima del file che vogliamo uploadare
            int              maxUploadSize = 100000000;
            MultipartRequest multi         = new MultipartRequest(request, ".", maxUploadSize);
            String           descrizione   = multi.getParameter("text");
            File             myFile        = multi.getFile("myFile");
            String           filePath      = multi.getOriginalFileName("myFile");
            String           path          = "C:\files\";

            try
              {
                // ricaviamo i dati del file mediante un InputStream
                FileInputStream inStream = new FileInputStream(myFile);

                // stabiliamo dove andrà scritto il file
                FileOutputStream outStream = new FileOutputStream(path + myFile.getName());

                // salviamo il file nel percorso specificato
                while (inStream.available() > 0)
                    {
                    outStream.write(inStream.read());
                    }

                // chiudiamo gli stream
                inStream.close();
                outStream.close();
              }
            catch (FileNotFoundException fnfe)
              {
                fnfe.printStackTrace();
              }
            catch (IOException ioe)
              {
                ioe.printStackTrace();
              }

            forw = "/done.jsp";

            // mettiamo nella request i dati così da poterli ricavare dalla jsp
            request.setAttribute("contentType", context.getMimeType(path + myFile.getName()));
            request.setAttribute("text", descrizione);
            request.setAttribute("path", path + myFile.getName());
            request.setAttribute("size", Long.toString(myFile.length()) + " Bytes");

            RequestDispatcher rd = request.getRequestDispatcher(forw);

            rd.forward(request, response);
          }
        catch (Exception e)
          {
            e.printStackTrace();
          }
        }
    }



Pagina JSP
codice:


<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
   
    
    <title>My JSP 'index.jsp' starting page</title>
	<meta http-equiv="pragma" content="no-cache">
	<meta http-equiv="cache-control" content="no-cache">
	<meta http-equiv="expires" content="0">    
	<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
	<meta http-equiv="description" content="This is my page">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
 <form align="center" method="POST" action="ControllerFiles" enctype="multipart/form-data">
    <table align="center" border="2" style="border-collapse: collapse">
        <tr>
            <td align="center"><font size="4" color="yellow">Descrizione</font></td>
            <td colspan="2">
                    <textarea name="text" cols="33" rows="2"></textarea>
            </td>
        </tr>
        <tr>
            <td align="center">File</td>
            <td>
                    <input name="myFile" type="file">
            </td>
            <td align="center">
                    <input type="submit" name="salva" value="SALVA">
            </td>
        </tr>
    </table>
</form>
 
 
</html>




WEB.XML DI TOMCAT
codice:

<?xml version="1.0" encoding="ISO-8859-1"?>

<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">



 <welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
 </welcome-file-list>

   <servlet>
    <servlet-name>ControllerFiles</servlet-name>
    <servlet-class>ControllerFiles</servlet-class>
  </servlet>
   <servlet-mapping>
    <servlet-name>ControllerFiles</servlet-name>
    <url-pattern>/ControllerFiles</url-pattern>
  </servlet-mapping>

</web-app>

genius
dott. ing. cav. ...FN

Genio


Regione: Puglia
Prov.: Bari
Città: Molfetta - Caput Mundi


Inserito il - 22/12/2008 : 23:28:42  Mostra Profilo  Visita l'Homepage di genius  Clicca per vedere l'indirizzo MSN di genius  Invia a genius un messaggio Yahoo! Invia a genius un Messaggio Privato  Rispondi Quotando
non ho mai fatto una cosa del genere, di jsp non ne so molto (pbolo intervieni plz) ma se fosse possibile inserire graficamente un oggetto JProgressBar all'interno di una jsp, bè non ti resterebbe che fare banalmente una cosa del genere:


                ...
                int max = inStream.available();
                nomeBarra.setMaximum(max); // numero di byte totali
                nomeBarra.setValue(0); // numero di byte letti
                while (inStream.available() > 0)
                    {
                    outStream.write(inStream.read());
                    nomeBarra.setValue(max - inStream.available()); // totali - ancora_da_leggere = quelli letti
                                                                    // volendo puoi fare in percentuale dividento per 100
                                                                    // ovviamente troncando o arrotondando.
                    }
                ...


"...e se non hai morale
e se non hai passione
se nessun dubbio ti assale
perché la sola ragione che ti interessa avere
è una ragione sociale
soprattutto se hai qualche dannata guerra da fare
non farla nel mio nome
non farla nel mio nome
che non hai mai domandato la mia autorizzazione
se ti difenderai non farlo nel mio nome
che non hai mai domandato la mia opinione..."

Un blog farlocco
Torna all'inizio della Pagina

comm64
Utente giovane


Regione: Puglia
Prov.: Foggia


Inserito il - 22/12/2008 : 23:59:02  Mostra Profilo  Visita l'Homepage di comm64 Invia a comm64 un Messaggio Privato  Rispondi Quotando
Ciao, stavo provando un'altra strada.. quella di creare un'applicazione client java swing che comunicasse con la servlet in modo tale da poter inserire la bella JprogressBar e mi sono esaurito senza raggiungere un risultato. La Documentazione è sempre poca e sempre in Inglese.
Sembra quasi che certe cose siano segrete in ambito Java. Ho trovato solo librerie a pagamento ...
Quasi quasi ci rinuncio.. (causa esaurimento nervoso)

Ciao A tutti

Modificato da - comm64 in data 22/12/2008 23:59:41
Torna all'inizio della Pagina

genius
dott. ing. cav. ...FN

Genio


Regione: Puglia
Prov.: Bari
Città: Molfetta - Caput Mundi


Inserito il - 23/12/2008 : 18:55:02  Mostra Profilo  Visita l'Homepage di genius  Clicca per vedere l'indirizzo MSN di genius  Invia a genius un messaggio Yahoo! Invia a genius un Messaggio Privato  Rispondi Quotando
quindi tu vuoi fare una cosa del genere:

pagina html + applet <- lato client
servlet <- lato server

e vorresti far comunicare questa cosa? A naso non mi sembra così difficile, che problemi hai con l'applet?

n.b. tieni sempre presente le limitazioni imposte alle applet

"...e se non hai morale
e se non hai passione
se nessun dubbio ti assale
perché la sola ragione che ti interessa avere
è una ragione sociale
soprattutto se hai qualche dannata guerra da fare
non farla nel mio nome
non farla nel mio nome
che non hai mai domandato la mia autorizzazione
se ti difenderai non farlo nel mio nome
che non hai mai domandato la mia opinione..."

Un blog farlocco
Torna all'inizio della Pagina

comm64
Utente giovane


Regione: Puglia
Prov.: Foggia


Inserito il - 23/12/2008 : 19:03:30  Mostra Profilo  Visita l'Homepage di comm64 Invia a comm64 un Messaggio Privato  Rispondi Quotando
Praticamente creare una applicazione o Applet (che provvederò a creare un certificato sennò non mi funzionerà mai a causa delle limitazioni di sicurezza imposte), che sostituisca la pagina JSP nell'upload

Il problema è come sostituire quello che fa la pagina JSP in una classe java. Cioè inviare un file di tipo multipart/form-data alla servlet in questione, ipotizzando che si trovi su Htpp://localhost/Application/MiaServlet

Modificato da - comm64 in data 23/12/2008 19:05:07
Torna all'inizio della Pagina

comm64
Utente giovane


Regione: Puglia
Prov.: Foggia


Inserito il - 23/12/2008 : 19:36:21  Mostra Profilo  Visita l'Homepage di comm64 Invia a comm64 un Messaggio Privato  Rispondi Quotando
Forse ce l'ho fatta:) usando le librerie apache commons Http

Sono in fase di sperimentazione
Torna all'inizio della Pagina

comm64
Utente giovane


Regione: Puglia
Prov.: Foggia


Inserito il - 23/12/2008 : 21:10:42  Mostra Profilo  Visita l'Homepage di comm64 Invia a comm64 un Messaggio Privato  Rispondi Quotando
E' Ufficiale.Sono riuscito a inviare un file alla mia servlet (per essere sinceri + di uno contemporaneamente.. upload multiplo.)
Allego il codice perchè mi piace condividere sperando di far cosa utile.
"Naturalmente non ho applicato le regole di Ingegneria del Software e tanti controlli che sono utili, quindi il codice non è strutturato come si deve ma basta per capire come fare."
Obiettivo: Fare l'upload di file da applicazione stand-alone o applet su server sfruttando la servlet.
La servlet è la stessa del post in alto..
Lato client invece:Applet (per provarla non usate il browser perchè deve essere firmata tramite certificato)Potete cmq inserire il codice in un Jframe


//~--- JDK imports ------------------------------------------------------------

import java.awt.Dimension;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;

public class UploadApplet extends javax.swing.JApplet {

    private File[]      fileScelti;
    private JButton     jBtbUpload;
    private JList       jList1;
    private JScrollPane jScrollPane1;
    private JButton     jUploadBtb;

    public UploadApplet() {

        super();
        initGUI();
    }

    public static void main(String[] args) {

        SwingUtilities.invokeLater(new Runnable() {

            public void run() {

                JFrame       frame = new JFrame();
                UploadApplet inst  = new UploadApplet();

                frame.getContentPane().add(inst);
                ((JComponent) frame.getContentPane()).setPreferredSize(inst.getSize());
                frame.pack();
                frame.setVisible(true);
            }

        });
    }

    private void initGUI() {

        try
            {
            setSize(new Dimension(400, 300));
            getContentPane().setLayout(null);

            {
                jScrollPane1 = new JScrollPane();
                getContentPane().add(jScrollPane1);
                jScrollPane1.setBounds(27, 22, 273, 129);
                {}
            }

            {
                jUploadBtb = new JButton();
                getContentPane().add(jUploadBtb);
                jUploadBtb.setText("Apri");
                jUploadBtb.setBounds(319, 22, 46, 26);
                jUploadBtb.setFont(new java.awt.Font("Tahoma", 0, 8));
                jUploadBtb.addMouseListener(new MouseAdapter() {

                    public void mouseClicked(MouseEvent evt) {
                        jUploadBtbMouseClicked(evt);
                    }

                });
            }

            {
                jBtbUpload = new JButton();
                getContentPane().add(jBtbUpload);
                jBtbUpload.setText("Upload");
                jBtbUpload.setBounds(142, 194, 91, 34);
                jBtbUpload.addMouseListener(new MouseAdapter() {

                    public void mouseClicked(MouseEvent evt) {
                        jBtbUploadMouseClicked(evt);
                    }

                });
            }
            }
        catch (Exception e)
            {
            e.printStackTrace();
            }
    }

    private void jUploadBtbMouseClicked(MouseEvent evt) {

        JFileChooser chooser = new JFileChooser();

        chooser.setMultiSelectionEnabled(true);
        chooser.showOpenDialog(this);

        File[] files = chooser.getSelectedFiles();

        this.fileScelti = files;

        String elementi[] = new String[files.length];

        for (int i = 0; i < files.length; i++) {

            elementi[i] = files[i].getName();
            System.out.println(files[i].getPath());
        }

        jList1 = new JList(elementi);
        jScrollPane1.setViewportView(jList1);
        jList1.setPreferredSize(new java.awt.Dimension(486, 262));
    }

    private void jBtbUploadMouseClicked(MouseEvent evt) {

        String     url = "http://localhost:80/Massimo/ControllerFiles";
        HtppUpload up  = new HtppUpload();

        up.setURL(url);
        up.setTargetFile(fileScelti);
        up.UploadFile();
    }
}

Classe per l'upload

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpStatus;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.methods.multipart.MultipartRequestEntity;
import org.apache.commons.httpclient.methods.multipart.Part;
import org.apache.commons.httpclient.params.HttpMethodParams;

//~--- JDK imports ------------------------------------------------------------

import java.io.File;

public class HtppUpload {

    private String URL;
    private File[]   targetFile;



	public void UploadFile() {
for (int i=0; i<targetFile.length; i++)
{
        PostMethod filePost = new PostMethod(URL);

        filePost.getParams().setBooleanParameter(HttpMethodParams.USE_EXPECT_CONTINUE, false);

        try
            {
            Part[] parts = { new FilePart(targetFile[i].getName(), targetFile[i]) };

            filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams()));

            HttpClient client = new HttpClient();

            client.getHttpConnectionManager().getParams().setConnectionTimeout(5000);

            int status = client.executeMethod(filePost);

            if (status == HttpStatus.SC_OK) {
                System.out.println("Upload complete, response= " + filePost.getResponseBodyAsString());
            } else {
                System.out.println("Upload failed, response=" + HttpStatus.getStatusText(status));
            }
            }
        catch (Exception ex)
            {
            System.out.println("ERROR: " + ex.getClass().getName() + " " + ex.getMessage());
            ex.printStackTrace();
            }
        finally
            {
            filePost.releaseConnection();
            }
        }
    }

    public String getURL() {
        return URL;
    }

    public void setURL(String url) {
        URL = url;
    }

    public File[] getTargetFile() {
		return targetFile;
	}

	public void setTargetFile(File[] targetFile) {
		this.targetFile = targetFile;
	}
}



Con questa applicazione si può fare l'upload multiplo selezionando una sola volta con ALT+File nella JFilechooser sorpassando quindi le limitazioni delle pagine jsp e html che vogliono per forza che si deve selezionare per ogni file.

Una domanda x genius: adesso potrei inserire la JprogressBar.. che ne pensi? devo solo capire come fare
Torna all'inizio della Pagina

genius
dott. ing. cav. ...FN

Genio


Regione: Puglia
Prov.: Bari
Città: Molfetta - Caput Mundi


Inserito il - 24/12/2008 : 09:34:48  Mostra Profilo  Visita l'Homepage di genius  Clicca per vedere l'indirizzo MSN di genius  Invia a genius un messaggio Yahoo! Invia a genius un Messaggio Privato  Rispondi Quotando
si ora puoi sicuramente farlo, aggiungi la tua progress bar alla gui, devi strutturare un pò meglio il codice, ma in linea di massima puoi usare il metodo che ti ho descritto sopra.

Oggi per ovvie ragioni dubito di poter far + di questo, ma se posso e non sei ancora riuscito nel frattempo, nei prox giorni ti prometto che do uno sguardo + completo al codice, e magari vedo se riesco a darti una mano + concreta ;)

EDIT: ho visto che hai eliminato il ciclo in cui inviavi il file perchè stai usando HttpClient... forse ora è + difficile tenere traccia dei progressi, ma vedrò meglio ;)

"...e se non hai morale
e se non hai passione
se nessun dubbio ti assale
perché la sola ragione che ti interessa avere
è una ragione sociale
soprattutto se hai qualche dannata guerra da fare
non farla nel mio nome
non farla nel mio nome
che non hai mai domandato la mia autorizzazione
se ti difenderai non farlo nel mio nome
che non hai mai domandato la mia opinione..."

Un blog farlocco
Torna all'inizio della Pagina

comm64
Utente giovane


Regione: Puglia
Prov.: Foggia


Inserito il - 24/12/2008 : 10:39:17  Mostra Profilo  Visita l'Homepage di comm64 Invia a comm64 un Messaggio Privato  Rispondi Quotando
Nel Frattempo, Buon Natale
Torna all'inizio della Pagina

genius
dott. ing. cav. ...FN

Genio


Regione: Puglia
Prov.: Bari
Città: Molfetta - Caput Mundi


Inserito il - 24/12/2008 : 10:55:49  Mostra Profilo  Visita l'Homepage di genius  Clicca per vedere l'indirizzo MSN di genius  Invia a genius un messaggio Yahoo! Invia a genius un Messaggio Privato  Rispondi Quotando
ho trovato questo, ma usa ftp :S
http://coding.derkeiler.com/Archive/Java/comp.lang.java.gui/2005-11/msg00045.html

cmq auguri anche a te ;)

"...e se non hai morale
e se non hai passione
se nessun dubbio ti assale
perché la sola ragione che ti interessa avere
è una ragione sociale
soprattutto se hai qualche dannata guerra da fare
non farla nel mio nome
non farla nel mio nome
che non hai mai domandato la mia autorizzazione
se ti difenderai non farlo nel mio nome
che non hai mai domandato la mia opinione..."

Un blog farlocco
Torna all'inizio della Pagina

comm64
Utente giovane


Regione: Puglia
Prov.: Foggia


Inserito il - 24/12/2008 : 12:13:46  Mostra Profilo  Visita l'Homepage di comm64 Invia a comm64 un Messaggio Privato  Rispondi Quotando
Ho trovato anche questo suggerimento su un forum:
Hi,

One way is to override sendData from org.apache.commons.httpclient.methods.multipart.FilePart and add your custom code for monitoring and calculating progress file upload.

Regards,
Ivica

mo dovrei capire come metterlo in pratica
Torna all'inizio della Pagina

feeb
Cantù Che Conta Col Cayenne

neophyte

Prov.: Zara


Inserito il - 25/12/2008 : 00:45:56  Mostra Profilo  Visita l'Homepage di feeb  Clicca per vedere l'indirizzo MSN di feeb Invia a feeb un Messaggio Privato  Rispondi Quotando
http://www.raditha.com/megaupload/

Originally created to provide a progress bar support for file uploads with php, the project has grown to cover for JSP/Servlet based file uploads as well. Plans are afoot to release a Perl version of megaupload in the coming weeks.

http://www.avaaz.org/it/ - http://www.flickr.com/photos/dimethyltryptamine/
Torna all'inizio della Pagina
  Discussione Precedente Discussione Discussione Successiva  
 Nuova Discussione  Rispondi
 Versione Stampabile Bookmark this Topic Aggiungi Segnalibro
Vai a:
Forum by laureateci.it © 2002 - 2012 Laureateci Communications Torna all'inizio della Pagina
Il DB ha risposto in 0,38 secondi.

TargatoNA.it | SuperDeejay.Net | Antidoto.org | Brutto.it | Equiweb.it | Snitz Forum 2000