Come impostare il percorso di “percorso di contesto” per i file caricati utilizzando fileupload Apache comune?
-
04-10-2019 - |
Domanda
Sto usando Apache libreria comune fileupload con Netbeans 6.8 + Glassfish.I'm cercando di cambiare il percorso di caricamento corrente di essere nel percorso del contesto attuale del servlet, qualcosa di simile a questo: WEB-INF / upload
così ho scritto:
File uploadedFile = new File("WEB-INF/upload/"+fileName);
session.setAttribute("path",uploadedFile.getAbsolutePath());
item.write(uploadedFile);
ma ho notato che la biblioteca salva i file caricati in GlassFish cartella , ecco cosa ottengo quando stampo il percorso assoluto del file caricato:
C:\Program Files\sges-v3\glassfish\domains\domain1\WEB-INF\upload\xx.rar
La mia domanda:
- Come posso forzare il FileUpload comune per salvare il file caricato in un percorso relativo al percorso servlet corrente, quindi non ho bisogno di specificare l'intero percorso? è possibile?
Soluzione
Il java.io.File
agisce sul file system del disco locale e sa assolutamente nulla sul contesto è in esecuzione in. Non si deve aspettare per trovare la posizione "giusta" quando si passa un percorso relativo web in. sarebbe diventato relativamente al directory di lavoro corrente , che dipende da come l'avvio dell'ambiente. Non si vuole essere dipendente da quello.
È possibile utilizzare ServletContext#getRealPath()
per convertire un percorso web relativo a un percorso di file system del disco locale di assoluto.
String relativeWebPath = "/WEB-INF/uploads";
String absoluteFilePath = getServletContext().getRealPath(relativeWebPath);
File uploadedFile = new File(absoluteFilePath, FilenameUtils.getName(item.getName()));
// ...
Detto questo, spero che tu sia consapevole del fatto che la cartella Deploy non è il posto giusto per i file caricati che dovrebbero essere salvati in modo permanente. Tutto si perde quando si ridistribuisce la webapp. Vedere anche Come scrivere un file cartella delle risorse / immagini del app?