View Full Version : [JAVA-STRUTS] Upload file
cromatino
27-05-2008, 08:38
Salve ragazzi. Ho realizzato una semplice app in struts che mi consente di fare l'upload di più file e salvarli in un db come longblob (che da quanto ho letto dovrebbe essere 4GB. La lista di file si genera dinamicamente, non c'è un numero fisso di file da inviare grazie ad uno script. Funziona tutto, ma il problema è che se invio una mole di file troppo grande (tipo file da 30MB in su) l'applicazione genera un'eccezione e mi si blocca il pc. In MySQL ho settato l'upload max a 1GB. Ho aumentato la ram per la JDK con l'opzione "-Xmx256m" nelle properietà di MyEclipse e sembra accettare file più grandi, ma nn maggiori di 50MB. Ho controllato l'utilizzo della memoria e per un file da 70MB saliva tipo a 2GB di ram...quindi entrava in swap dato che ho solo 1GB di ram fisica.
Esiste un sistema per prendermi i file lentamente, tipo a pacchetti così non sovraccarico il pc?
Grazie in anticipo.
Bye
palombaro
27-05-2008, 10:26
Salve ragazzi. Ho realizzato una semplice app in struts che mi consente di fare l'upload di più file e salvarli in un db come longblob (che da quanto ho letto dovrebbe essere 4GB. La lista di file si genera dinamicamente, non c'è un numero fisso di file da inviare grazie ad uno script. Funziona tutto, ma il problema è che se invio una mole di file troppo grande (tipo file da 30MB in su) l'applicazione genera un'eccezione e mi si blocca il pc. In MySQL ho settato l'upload max a 1GB. Ho aumentato la ram per la JDK con l'opzione "-Xmx256m" nelle properietà di MyEclipse e sembra accettare file più grandi, ma nn maggiori di 50MB. Ho controllato l'utilizzo della memoria e per un file da 70MB saliva tipo a 2GB di ram...quindi entrava in swap dato che ho solo 1GB di ram fisica.
Esiste un sistema per prendermi i file lentamente, tipo a pacchetti così non sovraccarico il pc?
Grazie in anticipo.
Bye
Quando fai submit della presa in carico del file invochi una action che fa direttamente il lavoro?...usi un oggetto FormFile?
cromatino
27-05-2008, 11:41
sì invoco una action, in particolare una DispatchAction visto che devo gestire più cose. Il metodo insert di questa DispatchAction farà il lavoro di inserimento nel DB.
sì uso il formfile, ma in realtà non è uno solo, ma più di uno...in base alla decisione dell'utente.
Se serve altro fammi sapere.
palombaro
27-05-2008, 12:10
sì invoco una action, in particolare una DispatchAction visto che devo gestire più cose. Il metodo insert di questa DispatchAction farà il lavoro di inserimento nel DB.
sì uso il formfile, ma in realtà non è uno solo, ma più di uno...in base alla decisione dell'utente.
Se serve altro fammi sapere.
Mi verrebbe naturale sganciare la insert dei file tramite un thread lanciato all' uopo, in modo tale da non bloccare il naturale corso della action tenendo poi un monitor dello stato del processo....per quanto riguarda l' occupazione di ram...se lo scope e di session tutti i file che carichi sono in sessione mi sà....quindi mmm fammi pensare un secondo..
cromatino
27-05-2008, 15:37
I thread non sono argomento mio, quindi dovrei cominciare a studiarmeli se non mi proponi altre soluzioni. Per quanto riguarda lo scope...i file li prendo dalla request (e non request.getSession, così lo facevo in un progetto vecchio...ma l'occupazione della ram è uguale) quindi non dovrebbe essere attributi di sessione. Bisognerebbe metterci daccordo sul concetto di sessione:d.
Avevo pensato a questa soluzione:
- prendo l'ArrayList di files
- li scrivo sul pc server (nel mio caso è sempre lo stesso)
- cancello l'ArrayList così libero memoria
- leggo i file che ho appena scritto uno alla volta e me li salvo nel DB
Resta il problema di un file più grande di 70-80MB...perchè se l'upload è anche di 300-400MB ma sono tipo 10 files da 30-40MB va bene con questa soluzione.
Ovviamente genererei una cartella col nomeutente_cognomeutente sul server e dentro ci metto i file veri e propri.
All'utente nel frattempo implemento qualcosa con ajax in modo da non bloccarlo con una gif per troppo tempo. Che ne pensi?
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.