sql >> Databasteknik >  >> RDS >> Mysql

Hur jag sparar och hämtar en bild på min server i en java-webapp

Istället för att skriva den till min C-enhet ska jag köra den på servern, men var ska jag lagra bilden för att senare hämta och visa den i en xhtml-fil?

Det beror på hur mycket kontroll du har över att konfigurera servern. Idealiskt skulle vara att konfigurera en fast sökväg utanför Tomcat webapps-mappen. Till exempel, /var/webapp/upload . Du kan ställa in den här sökvägen som ett VM-argument eller miljövariabel så att din webbapp kan hämta den programmatiskt utan att behöva ändra koden.

Till exempel när du anger som VM-argument -Dupload.location=/var/webapp/upload , kan du slutföra uppladdningen enligt följande:

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.

När det gäller att skicka tillbaka filen är det mest idealiska att lägga till uppladdningsplatsen som en separat <Context> till Tomcat. T.ex.

<Context docBase="/var/webapp/upload" path="/uploads" />

På så sätt kan du komma åt den direkt av http://example.com/uploads/foo-123456 .ext

Om du har noll kontroll över att konfigurera servern, så är det bra att lagra i DB eller skicka till en tredje parts värd som Amazon S3.

Se även:



  1. Prestanda överraskningar och antaganden:GROUP BY vs. DISTINCT

  2. Hur vet jag om en databas är av hög kvalitet?

  3. PostgreSQL CSV-import från kommandoraden

  4. Hur man döljer resultatuppsättningens dekoration i Psql-utgång