in plaats van het naar mijn C-schijf te schrijven, ga ik het op de server uitvoeren, maar waar moet ik de afbeelding opslaan om later op te halen en weer te geven in een xhtml-bestand?
Dat hangt af van hoeveel controle je hebt over het configureren van de server. Ideaal zou zijn om een vast pad buiten de Tomcat-webapps-map te configureren. Bijvoorbeeld /var/webapp/upload
. U kunt dit pad instellen als een VM-argument of omgevingsvariabele, zodat uw webapp het programmatisch kan ophalen zonder dat u de code hoeft te wijzigen.
Als u bijvoorbeeld als VM-argument -Dupload.location=/var/webapp/upload
opgeeft , kunt u de upload als volgt voltooien:
Path folder = Paths.get(System.getProperty("upload.location"));
String filename = FilenameUtils.getBaseName(uploadedFile.getName());
String extension = FilenameUtils.getExtension(uploadedFile.getName());
Path file = Files.createTempFile(folder, filename + "-", "." + extension);
try (InputStream input = uploadedFile.getInputStream()) {
Files.copy(input, file, StandardCopyOption.REPLACE_EXISTING);
}
String uploadedFileName = file.getFileName().toString();
// Now store it in DB.
Wat betreft het terugsturen van het bestand, zou het meest ideaal zijn om de uploadlocatie toe te voegen als een aparte <Context>
naar Tomcat. Bijv.
<Context docBase="/var/webapp/upload" path="/uploads" />
Op deze manier heb je er rechtstreeks toegang toe via http://example.com/uploads/foo-123456 .ext
Als je geen controle hebt over het configureren van de server, dan is opslaan in de DB of verzenden naar een externe host zoals Amazon S3 de beste keuze.
Zie ook:
- Hoe kan ik een relatief pad in de bestandsklasse opgeven om een bestand te uploaden?
- Betrouwbare gegevensweergave