Die Methode getInputStream()
der hochgeladenen Datei repräsentiert den Dateiinhalt.
InputStream input = uploadedFile.getInputStream();
Sie müssen es in eine Datei kopieren. Sie sollten zuerst einen Ordner auf dem lokalen Dateisystem vorbereiten, in dem die hochgeladenen Dateien gespeichert werden sollen. Zum Beispiel /path/to/uploads
(unter Windows wäre das auf der gleichen Festplatte wie auf dem Server). Beachten Sie, dass Sie absolut nicht die Dateien im erweiterten WAR-Ordner mit einem relativen Pfad oder getRealPath()
aus den hier genannten Gründen Uploaded image only available after refreshing the page speichern sollten.
Dann müssen Sie den Dateinamen automatisch generieren. Andernfalls, wenn jemand anderes eine Datei mit zufällig demselben Namen später hochlädt, würde sie überschrieben werden. Sie könnten die Funktion Files#createTempFile()
verwenden, um einen automatisch generierten Dateinamen zu erhalten.
Path folder = Paths.get("/path/to/uploads");
String filename = FilenameUtils.getBaseName(uploadedFile.getName());
String extension = FilenameUtils.getExtension(uploadedFile.getName());
Path file = Files.createTempFile(folder, filename + "-", "." + extension);
Der Weg zum Uploads könnte, wenn notwendig, in diesem Q & A gezeigt, basierend auf einem von mehreren Wegen parametriert werden: Recommended way to save uploaded files in a servlet application. Die FilenameUtils
ist Teil von Apache Commons IO, die Sie bereits in Ihrem Klassenpfad haben sollten, da es eine Abhängigkeit von der Tomahawk-Datei-Upload-Komponente ist.
Schließlich streamen nur die hochgeladene Datei zu dieser Datei (unter der Annahme, Java 7):
try (InputStream input = uploadedFile.getInputStream()) {
Files.copy(input, file, StandardCopyOption.REPLACE_EXISTING);
}
System.out.println("Uploaded file successfully saved in " + file);
Dann es zurück zum Download, am einfachsten /path/to/uploads
als neuen Webapp Kontext oder ein virtuelles Host zu registrieren wäre so dass alle diese Dateien über eine URL verfügbar sind. Siehe auch Load images from outside of webapps/webcontext/deploy folder using <h:graphicImage> or <img> tag.
fügen Sie weitere details.post vollständigen Code –
@Abin ich bearbeitet mit Code, ich bekomme Name der Datei, aber wie kann ich es hochladen ot Server, Sie wissen es? –
Sie verwenden MyFaces..Richtig? –