Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312

    upload file cartella destinazione

    Salve, devo fare l'upload di un file tramite form con le libreire oreilly.
    Dalla form, oltre che il file, invio anche una stringa che rappresenta la cartella di destinazione. Come posso salvare il mio file dove dico io se per estrarre il nome della directory (che invio con la stessa form) devo creare un oggetto multipartrequest che come parametri prende proprio il nome della cartella di destinazione?
    A tal proposito ho trovato questo esempio http://www.mokabyte.it/2000/01/uploadservlet.htm
    Qualcuno mi sa spiegare la frase: "Ora nel servlet abbiamo un oggetto di tipo File che possiamo utilizzare come vogliamo.
    Parlando di una procedura di upload, quello che ci interessa è salvare tale file sul nostro file system. "
    Il file non era già copiato nella directory corrente?

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

    Re: upload file cartella destinazione

    Originariamente inviato da lio.b
    Il file non era già copiato nella directory corrente?
    Non ho mai usato quella libreria ma guardando la documentazione mi sembra abbastanza semplice da capire. Il costruttore di MultipartRequest si occupa di leggere lo stream di dati inviato nel body della request, parsarlo e di scrivere il o i file sul file-system nella directory specificata.

    Poiché nell'articolo usano "." come directory allora, per rispondere alla tua domanda, sì i file sono già stati scritti nella directory corrente. Mi sembra un po' azzardato usare la "directory corrente" .... quale è? Al massimo si può specificare una directory temporanea più appropriata, quella rintracciabile dalla system property "java.io.tmpdir", ad esempio.

    Comunque il succo è questo: tu passi una directory a MultipartRequest. Può essere quella che ti pare. Se vuoi che i file siano messi permanentemente in una certa directory, specifica già quella e basta. Se vuoi puoi farli andare in una directory "temporanea" e poi con del codice (come nell'articolo) copiarli da un'altra parte più appropriata. O invece leggerli e scrivere il contenuto in campo blob di una tabella su db e poi cancellare i file.
    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
    Sep 2008
    Messaggi
    312
    Ok, fin qui nessun problema. Dato che il nome della cartella di destinazione la invio sempre dalla form devo fare quel giochetto di salvare il file in una directory corrente, copiarlo in quella che dico io e poi cancellare il vecchio file.
    Vedendo il codice si fa File f = multi.getFile("curriculum").
    Dato che le richieste dei file da inserire sono parecchie può capitare che più utenti contemporaneamente inseriscano file... il codice della servlet che va in esecuzione è sempre lo stesso per cui di file f ce ne può essere solo uno e si hanno problemi di sovrascrittura o no?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da lio.b
    può capitare che più utenti contemporaneamente inseriscano file... il codice della servlet che va in esecuzione è sempre lo stesso per cui di file f ce ne può essere solo uno e si hanno problemi di sovrascrittura o no?
    Se due utenti inviano entrambi contemporaneamente un file con lo stesso nome e tu hai usato una directory unica e fissa per gli upload, sì in questo caso ci sono problemi.
    O usi una directory specifica per ogni utente magari componendola con un ID o un altro codice univoco, oppure rinomini i file. Nota infatti che MultipartRequest può usare un FileRenamePolicy che ti permette di rinominare al volo i file prima che MultipartRequest li scriva sul file-system. Anche qui puoi pensare di generare un nome "unico" in vari modi.
    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
    Sep 2008
    Messaggi
    312
    Scusami,
    è tutto chiaro tranne l'interfaccia... Il rinominare dovrebbe serire come dici te a cambiare il nome del file altrimenti si chiamerebbero tutti f, giusto?
    Quindi al posto di File f = multi.getFile("curriculum") cosa dovrei scrivere? Nel senso che ho visto l'interfaccia DefaultRenamePolicy ed è proprio quello che mi serve. Potresti scrivermi in una riga di codice come fare?
    Poi non ti disturbo più, sei stato fin troppo gentile, grazie

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da lio.b
    Il rinominare dovrebbe serire come dici te a cambiare il nome del file altrimenti si chiamerebbero tutti f, giusto?
    Quindi al posto di File f = multi.getFile("curriculum") cosa dovrei scrivere?
    No alt. 'f' è solo il nome della variabile che usi nel sorgente .... non centra nulla con il nome del file!! 'f' fa riferimento ad un oggetto java.io.File che rappresenta (e contiene) il path al file.

    Originariamente inviato da lio.b
    Nel senso che ho visto l'interfaccia DefaultRenamePolicy ed è proprio quello che mi serve. Potresti scrivermi in una riga di codice come fare?
    La classe DefaultFileRenamePolicy implementa FileRenamePolicy e fornisce una logica di renaming molto semplice: usa un numero progressivo che inserisce tra il nome e la estensione ma solo nel caso in cui il nome collide con uno già presente nella directory.
    Ti basta istanziare un DefaultFileRenamePolicy e passarlo al costruttore di MultipartRequest (vedi i vari costruttori).

    Supponiamo che la directory che tu passi sia C:\Temp e supponiamo che nel form hai un campo <input type="file" name="mioFile">. Usando un DefaultFileRenamePolicy ottieni questi risultati:

    L'utente A fa l'upload di pippo.txt:

    mr.getFile("mioFile") --> java.io.File che rappresenta "C:\Temp\pippo.txt"
    mr.getFilesystemName("mioFile") --> "pippo.txt"
    mr.getOriginalFileName("mioFile") --> "pippo.txt"

    Poi l'utente B fa l'upload di un altro file che si chiama anch'esso pippo.txt:

    mr.getFile("mioFile") --> java.io.File che rappresenta "C:\Temp\pippo1.txt"
    mr.getFilesystemName("mioFile") --> "pippo1.txt"
    mr.getOriginalFileName("mioFile") --> "pippo.txt"

    Vedi il "1" aggiunto da DefaultFileRenamePolicy? Nel secondo upload DefaultFileRenamePolicy scopre che esiste già un file pippo.txt e forma un nuovo nome aggiungendo questo progressivo.
    Il nome "originale", quello inviato dal client (e senza path!), lo puoi sempre ottenere con getOriginalFileName()
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.