Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [java] send file from applet to server

    come da titolo, ho un'applet che registra un file audio, e devo inviarlo ad un server (che quindi si trova su un determinato indirizzo ip e porta)

    come posso fare???

    ho trovato parekkio codice su internet ma nessuno funzionante!! avete del codice già testato?

    grazie spero di essere riuscito a farmi capire

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Perchè un'applet possa effettuare connessioni con un server sono necessarie alcune considerazioni:

    1) L'applet può effettuare la connessione in modo sicuro se il server a cui tenta di connettersi è lo stesso dal quale è stata scaricata

    2) L'applet può effettuare la connessione ad un server diverso da quello da cui è stata scaricata solo se è firmata

    3) L'applet può effettuare la connessione ad un server diverso da quello da cui è stata scaricata solo se le policy impostate sul client lo consentono

    Le opzioni 2 e 3 sono, ovviamente, una alternativa all'altra.

    Tutto questo perchè per le applet sono previste pesanti restrizioni di sicurezza.


    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
    il mio caso è il 1°!!

    praticamente la mia applet inviata dal server deve effettuare una registrazione vocale ed inviare il file generato al server!!

    grazie per la risposta... attendo

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Tieni presente che in questo forum non si chiede codice già pronto (per la richiesta di sviluppo codice c'è il forum "Offro Lavoro / Collaborazione").
    Posta il tuo codice, posta le eccezioni che ottieni così vediamo cosa sistemare.

    Sostanzialmente si tratta di creare una Socket verso il server su una determinata porta e inviare i byte del file secondo un proprio protocollo. Il più banale, usando degli array di byte comunicando prima al server la dimensione totale del file che verrà inviato.


    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

  5. #5
    questo è il codice dell'applet!! scusate la confusione ma è in fase di lavorazione!

    codice:
    public void saveToFile(String name, AudioFileFormat.Type fileType)
    /*     */   {
    /* 255 */     if (this.audioInputStream == null) {
    /* 256 */       reportStatus("No loaded audio to save");
    /* 257 */       return;
    /* 258 */     }if (this.file != null) {
    /* 259 */       createAudioInputStream(this.file, false);
    /*     */     }
    /*     */ 
    /*     */     try
    /*     */     {
    /* 264 */       this.audioInputStream.reset();
    /*     */     } catch (Exception e) {
    /* 266 */       reportStatus("Unable to reset stream " + e);
    /* 267 */       return;
    /*     */     }
    /*     */
    /* 270 */     File file = new File(System.getProperty("user.home")+System.getProperty("file.separator")+this.fileName+" - analisivocale.wav");
    /*     */     try
    /*     */     {//la riga sotto completa la scrittura del file
    /* 273 */       if (AudioSystem.write(this.audioInputStream, fileType, file) == -1) 
    /* 274 */         throw new IOException("Problems writing to file");
    /*     */     } catch (Exception ex) {
    /* 276 */       reportStatus(ex.toString());
    /* 277 */     }this.samplingGraph.repaint();
    /*     */ 
    /* 282 */     Vector v = new Vector();
    /* 283 */     FileInputStream fis = null;
    /*     */     try {
    /* 285 */       fis = new FileInputStream(file);
    /*     */     } catch (FileNotFoundException ex) {
    /* 287 */       ex.printStackTrace();
    /*     */     }
    /* 289 */     int i = 0;
    /*     */     try {
    /* 291 */       while ((i = fis.read()) != -1)
    /* 292 */         v.add(new Integer(i));
    /*     */     } catch (IOException ex) {
    /* 294 */       ex.printStackTrace();
    /*     */     }
    /*     */ 
    /* 297 */     Vector vett = new Vector();
    /* 298 */     vett = coppia(v, this.fileName);
    /*     */     try
    /*     */     {
                  String sep=System.getProperty("file.separator");
                  String pathcompleto="http:"+sep+sep+sep+sep+ip+":"+port+sep+sep+"ReVA1.0"+sep+sep+"ObjectServlet";
    /* 305 */     //System.out.println("ip "+this.ip + "-  porta "+this.port + "-  pathcompleto "+pathcompleto);
                  send(this.ip, this.port, pathcompleto, vett);
    /*     */     }
    /*     */     catch (IOException e) {
    /*     */     }
    /*     */     try {
    /* 310 */       System.out.println("stringa inviata da: " + InetAddress.getLocalHost());
    /*     */     } catch (UnknownHostException ex) {
    /* 312 */       ex.printStackTrace();
    /*     */     }
    /*     */   }
    /*     */ 
    /*     */   public Vector coppia(Vector v, String Username) {
    /* 317 */     Vector stringa = new Vector();
    /* 318 */     stringa.add(Username);
    /* 319 */     Vector cp = new Vector();
    /* 320 */     cp.add(stringa);
    /* 321 */     cp.add(v);
    /* 322 */     return cp;
    /*     */   }
    
    /*     */   public void send(String addr, int p, String path, Serializable obj) throws IOException
    /*     */   {
        
      ByteArrayOutputStream buffer = new ByteArrayOutputStream();
         ObjectOutputStream out = new ObjectOutputStream(buffer);
         out.writeObject(obj);
     
         byte[] serobj = buffer.toByteArray();
     
         StringBuffer outb = new StringBuffer();
         outb.append("POST ");
         outb.append(path);
         outb.append(" HTTP/1.0\r\nUser-Agent: JavaObjectTunnel\r\n");
         outb.append("Content-Type: application/java-object\r\n");
         outb.append("Content-Length: ");
        outb.append(serobj.length);
         outb.append("\r\n\r\n");
     
         Socket s = new Socket(addr, p);
         OutputStream sout = s.getOutputStream();
        sout.write(outb.toString().getBytes());
        sout.write(serobj);
         sout.write("\r\n".getBytes());
        s.close();
      }
    e questo è il file che viene puntato dall' applet!!

    codice:
    public class ObjectServlet extends HttpServlet
    /*    */ {
    /*    */   HttpSession session;
    /*    */ 
    /*    */   public ObjectServlet()
    /*    */   {
    /* 23 */     this.session = null;
    /*    */   }
    /*    */ 
    /*    */   public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
    /*    */   {
    /* 28 */     ObjectInputStream in = new ObjectInputStream(request.getInputStream());
    /* 29 */     int param = 0;
    /* 30 */     int UserCode = 0;
    /* 31 */     String Username = "";
    /* 32 */     String temp = "";
    /* 33 */     String temp2 = "";
    /*    */     try
    /*    */     {
    /* 38 */       Vector vett = (Vector)in.readObject();
    /* 39 */       Vector vettWave = (Vector)vett.get(1);
    /* 40 */       Vector vettString = (Vector)vett.get(0);
    /* 41 */       Username = (String)vettString.get(0);
    /* 42 */       SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd_hh.mm");
    /* 43 */       Date currentTime_1 = new Date();
    /* 44 */       String dateString = formatter.format(currentTime_1);
    /*    */ 
    /* 46 */       String pathFile = "C:/Programmi/tomcat50-jwsdp/webapps/ReVA/wav/" + Username + "_" + dateString + ".wav";
    /* 47 */       writefile(vettWave, pathFile);
    /*    */ 
    /* 50 */       GestioneDB db = new GestioneDB();
    /* 51 */       Vector v = db.getUserParameter(Username);
    /* 52 */       temp2 = (String)v.get(0);
    /* 53 */       UserCode = Integer.parseInt(temp2);
    /* 54 */       temp = (String)v.get(1);
    /* 55 */       if (temp.equals("1"))
    /* 56 */         param = 1;
    /* 57 */       if (temp.equals("2"))
    /* 58 */         param = 2;
    /* 59 */       if (temp.equals("3"))
    /* 60 */         param = 3;
    /* 61 */       if (temp.equals("4")) {
    /* 62 */         param = 4;
    /*    */       }
    /*    */ 
    /* 65 */       Input input = new Input(pathFile, param);
    /* 66 */       input.StartEngine();
    /* 67 */       String value = input.getOutput().getResult();
    /*    */ 
    /* 69 */       if ((value == "") || (value == null)) {
    /* 70 */         value = "FILE NON VALUTABILE DAL MODULO AUTOMATICO";
    /*    */       }
    /*    */ 
    /* 75 */       db.NewExam(UserCode, dateString, "wav/" + Username + "_" + dateString + ".wav", value, "In Attesa di Valutazione Medico");
    /*    */     }
    /*    */     catch (ClassNotFoundException e)
    /*    */     {
    /*    */     }
    /*    */   }
    /*    */ 
    /*    */   public void writefile(Vector text, String name)
    /*    */   {
    /*    */     try
    /*    */     {
    /* 86 */       Object[] texti = text.toArray();
    /* 87 */       FileOutputStream fos = new FileOutputStream(name);
    /* 88 */       for (int i = 0; i < texti.length; ++i)
    /* 89 */         fos.write(Integer.parseInt(texti[i].toString()));
    /*    */     }
    /*    */     catch (Exception e) {
    /* 92 */       System.out.println("errore try catch writefile " + e);
    /*    */     }
    /*    */   }
    /*    */ }
    non so perchè non mi ritrovo il file sul server! da nessuna parte!! sul client invece si!
    grazie per qualsiasi consiglio utile!!

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Direi che la gestione è alquanto complessa. Stai cercando di emulare l'inoltro di un oggetto serializzato tramite form HTML...

    La gestione dell'invio di file tramite protocollo HTTP (tramite form di tipo multipart) è piuttosto complessa lato server (esistono librerie specifiche che semplificano di molto la vita, vedi le O'Reilly Commons) e, sinceramente, non mi sono mai fatto carico di provare ad effettuarla senza l'uso di apposite librerie, andando a parsare la request come sembra tu faccia.

    Non credo, tuttavia, che il parsing della Request sia così semplice come l'hai fatto tu: tu ottieni l'input stream della request e ti aspetti di trovare subito il Vector serializzato... non credo che le cose funzionino così: ci sono degli header HTTP prima del blocco dati.

    Per prima cosa eviterei di ammazzare le eccezioni come fai tu: al verificarsi di un'eccezione dovresti stamparne, quantomeno, il trace (magari con qualche messaggio prima che faccia capire bene il punto a cui eri arrivato, anche se non è essenziale).
    Così potresti verificare sui log di Tomcat cosa accade lato server.

    Se il tuo intento è quello di usare i form HTML, perchè passi per la serializzazione di un Object Java? Non fai prima ad emulare un semplice "file upload" codificando il file in Base64? Sarebbe la via "più semplice".


    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

  7. #7
    seguirò il tuo consiglio sulle eccezioni!

    per quanto riguarda l'upload, io ho già una classe che mi fa l'upload del file, ma non so come adattarla all'interno dell'applet!! cosa intendi con CODIFICA BASE 64? dato che dici che è più semplice potrei attuare questa via

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Non so se ti convenga oppure no: non conosco ciò che è in tuo possesso a livello di classi già sviluppate e se dici di avere già una classe che effettua l'upload allora tanto meglio.

    La codifica Base64 viene usata generalmente per il trasferimento di dati binari su internet (per gli allegati delle mail, ad esempio, viene usata quasi sempre questa codifica, anche se non è ovviamente l'unica) e se non ricordo male, anche i form multipart delle pagine HTML (quelli che consentono, appunto, l'upload di file) utilizzano questa codifica per i dati (ma potrei sempre smabliarmi).

    Se fai una ricerca su Google otterrai tutte le informazioni sulla codifica Base64 (scritto tutto attaccato).

    E facendo una ricerca su questo forum dovrebbe saltar fuori una mia vecchia classe già pronta per tale codifica (non mi assumo alcuna responsabilità sulla correttezza di quella classe, anche perchè l'ho postata diversi anni fa ).

    In buona sostanza, la codifica Base64 "trasforma" ciascuna sequenza di byte in una sequenza di byte codificati in modo tale da poter essere rappresentata su supporti stampabili (a 64 bit, appunto, usa un set di caratteri stampabili per la rappresentazione... ogni gruppo di 3 byte di dati viene codificato in un gruppo di 4 byte). Quindi, ciascun file può essere codificato usando una normale stringa di testo. Non mi dilungo ulteriormente.


    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

  9. #9
    qualcuno può dare un'occhiata a questo: qui l'applet
    codice:
    import java.awt.*;
    import java.awt.event.*;
    import java.net.*;
    import java.io.*;
    import javax.swing.*;
    
    
    public class TestApplet extends JApplet implements ActionListener
        {
    
         JButton jbutton = null;
         public void init()
             {
             jbutton = new JButton("Send file");
             jbutton.addActionListener(this);
             this.getContentPane().add(jbutton);
         }
    
         public void actionPerformed(ActionEvent ae)
             {
             if(ae.getSource() == jbutton)
                 {
                 try
                     {
                     File file = new File("C:/a.txt");
    
                     FileInputStream  in = new FileInputStream(file);
                     byte[] buf=new byte[in.available()];
                     int bytesread = 0;
    
    
                     String toservlet = "http://192.168.1.7:8084/ReVA1.0/ProvaServlet";
    
                     URL servleturl = new URL(toservlet);
                     URLConnection servletconnection = servleturl.openConnection();
                     servletconnection.setDoInput(true);
                     servletconnection.setDoOutput(true);
                     servletconnection.setUseCaches(false);
                     servletconnection.setDefaultUseCaches(false);
    
                     DataOutputStream out=new DataOutputStream(servletconnection.getOutputStream());
    
                     while( (bytesread = in.read( buf )) > -1 )
                         {
                         out.write( buf, 0, bytesread );
                     }
    
                     out.flush();
                     out.close();
                     in.close();
    
                     DataInputStream inputFromClient = new DataInputStream(servletconnection.getInputStream());
                     //get what you want from servlet
                     //.......
                     inputFromClient.close();
                 }
                 catch(Exception e)
                     {
                     e.printStackTrace();
                 }
    
    
             }
         }
    
    }
    e qui la servlet
    codice:
    package JBean;
    
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.io.*;
    
    public class ProvaServlet extends HttpServlet
        {
         public void doPost(HttpServletRequest req,HttpServletResponse res)
             {
    
             ServletContext sc = this.getServletContext();
             try
                 {
                 String fileName = "a.txt";
                 String path = sc.getRealPath(File.separator)+fileName;
    
                 File yourFile = new File(path);
                 System.out.println("questo path... "+path);
                 FileOutputStream toFile = new FileOutputStream( yourFile );
                 DataInputStream fromClient = new DataInputStream( req.getInputStream() );
    
                 byte[] buff = new byte[1024];
                 int cnt = 0;
                     while( (cnt = fromClient.read( buff )) > -1 ) {
                     toFile.write( buff, 0, cnt );
                 }
                 toFile.flush();
                 toFile.close();
                 fromClient.close();
    
             }
             catch(Exception e)
                 {
                 e.printStackTrace();
             }
         }
    }
    mi da l'errore JAVA.NET.CONNECTEXCEPTION: connection refused...

    qualche aiuto??

    grazie
    ciao

  10. #10
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Connection refused significa che il server ha rifiutato la connessione... sei sicuro che l'URL che hai scritto sia corretta?

    Aggiungo: non vedo da nessuna parte nel client una richiesta di effettuare una Request in POST.... ma il server accetta SOLO richieste in POST.


    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.