Come non salvare un file sulla VM

di il
10 risposte

Come non salvare un file sulla VM

Ciao,

ho provato a cercare con la lente ma non ho trovato nulla per il mio caso.

Spero di riuscire a spiegarmi, ho questo codice di seguito che fa il download di un file excel, il problema è che salva il file nella macchina virtuale. Cosa posso fare per evitarlo?

Grazie mille in anticipo

private void downloadFile(File file, HttpServletResponse response){

            try {         
                response.setContentType("application/vnd.ms-excel");
                response.addHeader("content-disposition", "attachment; filename=ReportAssenzeDipendenti.xls");
                response.setHeader("Pragma", "public");
                response.setHeader("Cache-Control", "no-store");
                response.addHeader("Cache-Control", "max-age=0");
                FileInputStream fin = null;
                try {
                    fin = new FileInputStream(file);
                } catch (final FileNotFoundException e) {
                    e.printStackTrace();
                }
                final int size = 1024;
                try {
                    response.setContentLength(fin.available());
                    final byte[] buffer = new byte[size];
                    ServletOutputStream outputStream = null;

                    outputStream = response.getOutputStream();
                    int length = 0;
                    while ((length = fin.read(buffer)) != -1) {
                        outputStream.write(buffer, 0, length);
                    }
                    fin.close();
                    outputStream.flush();
                    outputStream.close();
                } catch (final IOException e) {
                    e.printStackTrace();
                }
            }catch (final Exception ex){
                ex.printStackTrace();
            }
        }

10 Risposte

  • Re: Come non salvare un file sulla VM

    Non sei stata chiara… fai il download di un file e non vuoi che venga salvato? E come dovrebbe fare il download?

  • Re: Come non salvare un file sulla VM

    Si perdonami!

    il mio intento è quello di salvare il file ma senza che esso scriva sul disco

    il metodo flush() svuota il buffer ma scrive sul disco. So però che senza questo metodo  è possibile che non tutto il contenuto si riversi sul file e quindi il file da salvare possa essere incompleto.

    Come posso ovviare?

  • Re: Come non salvare un file sulla VM

    QUI siamo nel dominio della ‘nonna in cariola’. 

    Stai chiedendo di risolvere un problema che e' la soluzione accrocchiata/sbagliata del VERO problema. 

    In pratica quello che chiedi non ha senso: il download di un file DEVE FARE ESATTAMENTE QUELLO: salvarlo su disco. 

    Se non vuoi che lo faccia, NON E' IL DOWNLOAD di un file che devi usare!

    Dovrai usare altro, ma noi non sappiamo che cosa vuoi REALMENTE fare!

    Ci sono n-mila soluzioni ancora piu' accrocchiose:

    lo cancelli

    lo salvi su un RAM Disk (un disco fatto con la memoria) 

    fai k'encription

    eccccvvccc

  • Re: Come non salvare un file sulla VM

    Oltre a ciò che ha scritto migliorabile, quel codice NON fa il download di un file, ma al contrario serve un file: lo legge dal disco del server e lo spedisce ad un client che lo sta richiedendo. Cosa ne faccia il client non è dato sapersi (sia perchè al server frega nulla, sia perchè non hai postato il codice usato dal client per il download). In altre parole: quel codice non scrive nulla su disco, ma legge DAL disco e spedisce su una connessione.

  • Re: Come non salvare un file sulla VM

    Esatto… quello è un UploadFile…

    A conti fatto questa richiesta non ha alcun senso logico

  • Re: Come non salvare un file sulla VM

    Perdonatemi, io sono alle prime armi su questo linguaggio e sicuramente non mi sono spiegata e non mi so spiegare.

    Ci riprovo, questi file si salvano sul disco della VM e si riempie quotidianamente, se ad esempio volessi salvare su un RAM DISK, come dovrei fare o quali informazioni dovrei cercare su internet?

    Vi ringrazio e siate clementi :)

  • Re: Come non salvare un file sulla VM

    Capisco che sei alle prime armi, ma il codice che hai postato non c'entra nulla col tuo problema. Quel codice NON scrive nulla su disco, quindi non è lui a riempire il disco della VM (che nessuno sa che ruolo abbia in questo contesto).

    Quel codice si limita a leggere un file che esiste già sul server e ad inviarlo al client che lo sta richiedendo (in pratica è la parte “lato server” di quello che un client chiama “download”).

    Che ruolo ha questa fantomatica VM?

  • Re: Come non salvare un file sulla VM

    In ogni caso, se in un PC si riempie un disco, imposta uno script che cancella i file più vecchi periodicamente

  • Re: Come non salvare un file sulla VM

    Ma si sta parlando dei file che il web server salva nella cache?

    Nel senso: ma che importa dei file salvati? 

    Se è un problema di spazio disco, ci sono n-mila modi per risolverlo! 

    usare un disco piu' grande: 8TB per 100 euro ed e' fatta. A voglia di riempire 8TB!

    fatti assegnare piu' spazio disco. 

    cancellare le stupidaggini (che sono tante, milioni di milioni come la stella di negroni) 

    assegnare un limite alle cache

    cancellare i file dopo che sono stati utilizzati

    usare partizioni compresse

    usare uno script schedulato come ha detto @oregon

    il ram disc scompare allo spegnimento della vm, quindi risolve il problema SOLO SE la vm viene riavviata.

    insomma, di soluzioni ne esistono milioni come la stella di negroni, che vuol dire qualita'

  • Re: Come non salvare un file sulla VM

    Ok vi ringrazio dei vostri preziosi consigli, ora vedrò come fare :)

Devi accedere o registrarti per scrivere nel forum
10 risposte