Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    23

    [gwt][java] form inserimento immagini

    salve a tutti, io sto facendo una web application in GWT per progetto universitario. questo progetto prevede la compilazione di un form, dentro il quale c'è la possibilità di inserire un'immagine. io avevo pensato di creare ,nel mio database, un attributo di tipo BLOB, quindi lato client creare compilazione con form e lato server creare l'insert nel DB. il problema è che quando vado a prendere i byte dell'immagine sembrerebbe andare in errore. vi posto una mia soluzione per magari aiutarmi a capire dove sbaglio.
    codice:
    Form form=new Form();
    FileUpload fupl=new FileUpload();
    HorizontalPanel ho=new HorizontalPanel();
    ho.add(form);
    ho.add(fupl);
    
    try{
    FileInputStream fis= new FileInputStream(fupl.getFilename());
    byte[] myFile= new byte[fis.available()];
    for(int i=0; i<myFile.length;i++){
      myFile[i]=fis.read();
    }
    }catch(..){
    ..
    }
    solo mi va in errore. come posso effettuare? avete altre soluzioni in merito?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da sella89 Visualizza il messaggio
    il problema è che quando vado a prendere i byte dell'immagine sembrerebbe andare in errore. vi posto una mia soluzione per magari aiutarmi a capire dove sbaglio.
    Non conosco GWT quindi posso solo andare "a naso" (e comunque posso dirti alcune cose sulla lettura da file).

    Innanzitutto il tuo codice è proprio come lo vedo nel post? Cioè istanzi FileUpload e poi subito dopo prendi il filename? Non credo abbia senso così ..... qui stai solo creando la UI o stai già gestendo il submit? (ripeto: non me ne intendo di GWT).

    In ogni caso: dimentica available(), serve praticamente quasi mai. E inoltre non leggere un byte per volta .... altrimenti "fai notte".
    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
    Aug 2014
    Messaggi
    23
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Non conosco GWT quindi posso solo andare "a naso" (e comunque posso dirti alcune cose sulla lettura da file).

    Innanzitutto il tuo codice è proprio come lo vedo nel post? Cioè istanzi FileUpload e poi subito dopo prendi il filename? Non credo abbia senso così ..... qui stai solo creando la UI o stai già gestendo il submit? (ripeto: non me ne intendo di GWT).

    In ogni caso: dimentica available(), serve praticamente quasi mai. E inoltre non leggere un byte per volta .... altrimenti "fai notte".
    grazie per la risposta. no diciamo che fileupload, form e horizontalPanel li instazio prima poi catturo l'evento per l'inserimento e prima di collegarmi al db volevo prendere l'immagine per mandargliela. come faccio a prendere i byte tutti insieme? sapresti darmi una mano su questo fronte?.
    anche perchè se nn riesco in questo modo devo inserire le immagini su una acartella sul server e prenderle da li ma anche questo passaggio mi risulta un pò ostico che le varie funzioni offerte da questi oggetti(fileUpload, form) sono abbastanza risicate.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da sella89 Visualizza il messaggio
    poi catturo l'evento per l'inserimento
    Ok, allora ha senso.

    Quote Originariamente inviata da sella89 Visualizza il messaggio
    e prima di collegarmi al db volevo prendere l'immagine per mandargliela. come faccio a prendere i byte tutti insieme?
    La dimensione del file potresti forse conoscerla dal FileUpload (verifica la documentazione .... va usata, se c'è io non conosco quel FileUpload).
    Altrimenti da un pathname in String puoi comunque creare un java.io.File e determinare la lunghezza. Ma se FileUpload fornisce la lunghezza ... è meglio.

    A quel punto creare un array di byte della giusta dimensione è banale, e poi anche leggere tutto il contenuto (e ripeto: non un byte per volta!). A dire il vero, sarebbe meglio poter ottenere un oggetto "Blob" (in JDBC è java.sql.Blob) e prenderne il OutputStream e poi leggere e passare blocchi di byte. Ma dipende da quale API/framework stai usando per l'accesso al database.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    23
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Ok, allora ha senso.


    La dimensione del file potresti forse conoscerla dal FileUpload (verifica la documentazione .... va usata, se c'è io non conosco quel FileUpload).
    Altrimenti da un pathname in String puoi comunque creare un java.io.File e determinare la lunghezza. Ma se FileUpload fornisce la lunghezza ... è meglio.

    A quel punto creare un array di byte della giusta dimensione è banale, e poi anche leggere tutto il contenuto (e ripeto: non un byte per volta!). A dire il vero, sarebbe meglio poter ottenere un oggetto "Blob" (in JDBC è java.sql.Blob) e prenderne il OutputStream e poi leggere e passare blocchi di byte. Ma dipende da quale API/framework stai usando per l'accesso al database.
    guarda uso proprio JDBC, purtroppo fileUpload non ha la possibilità di verificare la lunghezza del file. il mio intento era proprio quello di inserire il blob però sinceramente mi sta facendo uscire pazzo che è come se nn leggesse il byte e l'unico modo che mi era venuto in mente, per scorrere l'array di byte , era usare l'available e il read. ma sono inefficaci mi danno errori. nn so proprio che altro inventarmi.
    con l'outputStream come suggerisci di fare? la possibilità di leggere tutto insieme mi sapresti consigliare qualche cosa?

    grazie davvero mille per il supporto

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da sella89 Visualizza il messaggio
    guarda uso proprio JDBC, purtroppo fileUpload non ha la possibilità di verificare la lunghezza del file. il mio intento era proprio quello di inserire il blob però sinceramente mi sta facendo uscire pazzo che è come se nn leggesse il byte e l'unico modo che mi era venuto in mente, per scorrere l'array di byte , era usare l'available e il read. ma sono inefficaci mi danno errori. nn so proprio che altro inventarmi.
    con l'outputStream come suggerisci di fare? la possibilità di leggere tutto insieme mi sapresti consigliare qualche cosa?
    java.sql.Blob è una interfaccia ... non crei tu istanze di Blob, è la Connection che te le fornisce tramite createBlob().
    Quindi poi prendi il suo OutputStream con setBinaryStream(1) e leggi a blocchi di tot byte. Istanzia un array di es. 4096 byte, leggi in ciclo un blocco da file e lo passi al Blob e così via. Roba banale se hai basi sul I/O basilare.

    Poi quando fai una query di Insert (usa un PreparedStatement), puoi assegnare il blob.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    23
    Quote Originariamente inviata da andbin Visualizza il messaggio
    java.sql.Blob è una interfaccia ... non crei tu istanze di Blob, è la Connection che te le fornisce tramite createBlob().
    Quindi poi prendi il suo OutputStream con setBinaryStream(1) e leggi a blocchi di tot byte. Istanzia un array di es. 4096 byte, leggi in ciclo un blocco da file e lo passi al Blob e così via. Roba banale se hai basi sul I/O basilare.

    Poi quando fai una query di Insert (usa un PreparedStatement), puoi assegnare il blob.
    si ti ringrazio mi sono espresso male, lato server uso gia preparedStatement e il mio intento era proprio quello di fare un setBinaryStream().
    il mio problema è quando prendo l'immagine, la classe FileUpload() nn mi permette questo, credo che dovrò interfacciarmi con la servlet (fino adesso mai fatto) visto che GWT , per questo tipo di procedimento ,dovrebbe delegare tutto alla jsp(credo).
    quindi ora vedo come fare per comunicare con la servlet.
    altrimenti per caricare l'immagine su una cartella all'interno del Server, o del mio progetto, andando poi a prenderle direttamente da li, hai qualche consiglio?

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Premesso che nemmeno io ho mai usato GWT, googlando sono giunto a questa pagina, in cui c'è un esempio completo di web-app per l'upload di file.

    Quello che serve a te è il codice che c'è alla fine della pagina. In particolare, quell'esempio crea il file (o i files, se più di uno) nel disco del server... a te basta recuperare l'array di byte da usare poi per costruire il Blob... in quella pagina, comunque, c'è tutto.


    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
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    23
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Premesso che nemmeno io ho mai usato GWT, googlando sono giunto a questa pagina, in cui c'è un esempio completo di web-app per l'upload di file.

    Quello che serve a te è il codice che c'è alla fine della pagina. In particolare, quell'esempio crea il file (o i files, se più di uno) nel disco del server... a te basta recuperare l'array di byte da usare poi per costruire il Blob... in quella pagina, comunque, c'è tutto.


    Ciao.
    su questa pagina già ci ero arrivato(grazie lo stesso ), però da quanto ho capito lui non prende l'immagine in questione ma solamente il nome. a me servirebbe proprio l'immagine prendere i byte inserirli tramire setBinaryStream nella rispettiva tabella del db e poi riprenderlo con una select e inserirlo in una FlexTable.
    poi non so forse sbaglio io a leggere questa pagina e non la interpreto bene, ma una cosa che non saprei fare, è la setAction(). quella in teoria serve per riferirsi alla servlet di appartenenza però io vorrei evitare proprio questo.
    Se tu vedi il passaggio dove prende l'immagine me lo specifichi che non riesco proprio a vederlo.
    grazie mille in anticipo.

  10. #10
    Utente di HTML.it
    Registrato dal
    Aug 2014
    Messaggi
    23
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Premesso che nemmeno io ho mai usato GWT, googlando sono giunto a questa pagina, in cui c'è un esempio completo di web-app per l'upload di file.

    Quello che serve a te è il codice che c'è alla fine della pagina. In particolare, quell'esempio crea il file (o i files, se più di uno) nel disco del server... a te basta recuperare l'array di byte da usare poi per costruire il Blob... in quella pagina, comunque, c'è tutto.


    Ciao.
    scusa per il doppio post ma mi sei stato utilissimo. ok più o meno credo di aver capito come fare.imposto il form.SetAction(), creo l'httpRequest lato Server, risponderò con una risposta che prenderò lato client e da quest risposta faccio partire la connessione al db? potrebbe andare come ragionamento generale? (spero di essere stato chiaro nella mia spiegazione e sopratutto spero di farcela).
    grazie mille

Tag per questa discussione

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.