Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    108

    Salvare file su server da Applet

    Ciao gente
    qualcuno mi sa dire come posso far si che un file di tipo jpg venga salvato sul server su cui sta girando l'applet ?

    In sostanza il mio codice è questo :

    codice:
    try {
       Point punto;
       Dimension dimensione=new Dimension(600,500);
       punto=getLocationOnScreen();
       Rectangle rettangolo=new Rectangle(punto,dimensione);
       Robot robot = new Robot();
       BufferedImage bufferedImage = robot.createScreenCapture(rettangolo);
       File imageFile = new File("screenshot.png");
       ImageIO.write(bufferedImage, "png", imageFile);
    } catch (AWTException e) {
       e.printStackTrace();
    } catch (IOException e) {
       e.printStackTrace();
    }
    In locale il file viene salvato correttamente.
    Sul server no.
    A quanto so è corretto, nel senso che le applet non possono scrivere direttamente sul server per motivi di autorizzazioni.
    Come posso ovviare al problema ?
    Grazie !

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Salvare file su server da Applet

    Originariamente inviato da acer1629
    che un file di tipo jpg venga salvato sul server su cui sta girando l'applet ?

    nel senso che le applet non possono scrivere direttamente sul server per motivi di autorizzazioni.
    No. Le applet "girano" sul client ... non sul server. Se la applet proviene da un sito web, il client non può scrivere direttamente sul server .... ma perché qui siamo su HTTP, che non è mica un file-system!

    Qualcosa potrebbe essere salvato sul server se: a) la applet fa una qualche richiesta HTTP (ad esempio un POST) ad un certo URL sul server inviando dei dati e b) Il server fa eseguire qualcosa a seguito di tale richiesta, legge i dati nella request e scrive da qualche parte sul suo file-system.

    Ma deve essere fatto tutto espressamente, non è una cosa "generale".
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    108
    sto cercando degli esempi, ma non ne sto trovando uno che vada bene

  4. #4
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    108
    Niente da fare, continua a darmi errore nella creazione del Robot che mi cattura lo schermo creandomi il file da sparare poi sul server.
    Pensavo che il problema fosse strettamente legato alla parte in cui l'immagine venisse salvata.

    Al momento mi ritrovo cosi :

    codice:
     try {
    		  Point punto;
    		  Dimension dimensione=new Dimension(600,470);
    		  punto=getLocationOnScreen();
    		  Rectangle rettangolo=new Rectangle(punto,dimensione);
    		  Robot robot = new Robot();
    		  BufferedImage bufferedImage = robot.createScreenCapture(rettangolo);
    		  File imageFile = new File("screenshot.jpg");
    		  //ImageIO.write(bufferedImage, "jpg", imageFile);
    		  
    		  /************************************/
    		  
    		  
              FileInputStream  in = new FileInputStream(imageFile);
              byte[] buf=new byte[in.available()];
              int bytesread = 0;
              
              String ip="ip del server";
    		  
              String toservlet = "http://"+ip+"/applet/Servlet";
    
              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();
    		  
    		  
    		  /************************************/
    		  
    		  		  
    		  } catch (AWTException e) {
    		  e.printStackTrace();
    		  } catch (IOException e) {
    		  e.printStackTrace();
    		  }

    con la relativa servlet :

    codice:
    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 = "screenshot.jpg";
                 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();
             }
         }
    }
    L'errore spoolato a console è sempre lo stesso :

    Caricata immagine:
    Exception in thread "AWT-EventQueue-2" java.security.AccessControlException: access denied (java.awt.AWTPermission createRobot)
    at java.security.AccessControlContext.checkPermission (Unknown Source)
    at java.security.AccessController.checkPermission(Unk nown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.awt.Robot.checkRobotAllowed(Unknown Source)
    at java.awt.Robot.init(Unknown Source)
    at java.awt.Robot.<init>(Unknown Source)
    at MyApplet.finish(MyApplet.java:65)
    at MyApplet$2.actionPerformed(MyApplet.java:44)
    at java.awt.Button.processActionEvent(Unknown Source)
    at java.awt.Button.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilter s(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(U nknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarch y(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da acer1629
    Exception in thread "AWT-EventQueue-2" java.security.AccessControlException: access denied (java.awt.AWTPermission createRobot)
    L'uso di Robot è una di quelle operazioni che per motivi di sicurezza è controllata all'interno di una applet "non fidata".

    Per superare il problema devi: a) smanettare sul PC con le policy di sicurezza del JRE (questo lo fa una persona che sa dove mettere le mani .... non l'utente comune) oppure b) "firmare" digitalmente la applet. E finché la applet la usi tu o qualche tuo amico che si "fida" di te, puoi anche fare un certificato self-signed (che però non vale nulla). Altrimenti devi chiederlo ad una certification authority ... e a pagamento.

    Se Robot non fosse "privilegiato" pensa un bello scenario: vai su internet in una pagina web che esegue una applet "nascosta" (non visibile o senza output) che di tanto in tanto fa degli screenshot e li manda a qualcuno in rete. E magari sullo schermo tu hai dei dati "sensibili" ..... bello vero?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    108
    Si ma infatti ho capito il concetto che non è fattibile.
    Vorrei capire come ovviare al problema, non devo fare un applet ma qualcos'altro ?
    Il punto è che cmq è un tool per il disegno online, per cui ... non ho trovato altra strada che mettere tutto in un'applet.
    Non c'è alcun modo per dire al server che le applet o solo quella determinata applet possono scriverci / leggere senza problemi ?
    Visto che cmq il dominio è mio ...

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    108
    Mi sa che ci rinuncio ... se già salvare il file è un'impresa, non oso immaginare la creazione del robot che mi cattura lo schermo ...
    Forse è meglio orientarmi su Flash ... qualcuno può confermare / smentire ?
    Devo fare un semplice tool web dove si disegna e si salva il file sul server.
    Niente di più "semplice".

  8. #8
    Buongiorno a tutti.
    Scusate, ma ho anch'io lo stesso problema di acer e non mi sembra che non si possa fare poichè basta specificare da directory di lavoro o almeno così dicono tutti i siti che ho visitato.
    Ho seguito passo passo quanto mostrato qui
    http://asiloleague.altervista.org/je...olicytool.html
    ... fin dove si arriva ad un "cut & paste"
    ma incollare dove? all'interno del sorgente java non funziona

    sto utilizzando la j2sdk1.4.2_13
    ed il codice che sto tentando di far funzionare è il seguente

    funziona solo chiamndolo con l'appletviewer.exe e le opzioni specificate nella pagina

    http://www.roseindia.net/java/exampl...riteFile.shtml

    ho visitato vari forum ma tutti specificano la sintassi e non come compilare.
    E' una domanda da neofita, ma potete aiutarmi?

    Grazie

  9. #9
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da lotdox
    Ho seguito passo passo quanto mostrato qui
    http://asiloleague.altervista.org/je...olicytool.html
    Beh, certo. Andando a smanettare con le policy di sicurezza del JRE si può ovviamente dare i permessi alle applet che vuoi.
    Ma nota che si dovrebbe fare su ogni macchina che intende usare la applet! E potrei farlo io ... potresti farlo tu ... ma un utente "normale" non saprebbe dove mettere le mani (senza combinare casini).

    Originariamente inviato da lotdox
    ... fin dove si arriva ad un "cut & paste"
    ma incollare dove? all'interno del sorgente java non funziona
    Ovviamente in un sorgente Java no.

    La locazione e la sintassi dei file di policy è nella documentazione ufficiale:

    Default Policy Implementation and Policy File Syntax
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    108
    Scusate ma ... la policy non va messa sul server dove gira l'applet ? (basterebbe una volta)
    E' a livello client ?

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.