Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como eu salvo e recupero uma imagem no meu servidor em um webapp java


em vez de gravá-la na minha unidade C, vou executá-la no servidor, mas onde devo armazenar a imagem para depois recuperar e exibir em um arquivo xhtml?

Isso depende de quanto controle você tem sobre a configuração do servidor. O ideal seria configurar um caminho fixo fora da pasta de webapps do Tomcat. Por exemplo, /var/webapp/upload . Você pode definir esse caminho como um argumento de VM ou variável de ambiente para que seu webapp possa recuperá-lo programaticamente sem a necessidade de alterar o código.

Por exemplo, ao especificar como argumento de VM -Dupload.location=/var/webapp/upload , você pode concluir o upload da seguinte maneira:
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.

Quanto à entrega do arquivo de volta, o ideal seria adicionar o local de upload como um <Context> separado para Tomcat. Por exemplo.
<Context docBase="/var/webapp/upload" path="/uploads" />

Dessa forma, você pode acessá-lo diretamente por http://example.com/uploads/foo-123456 .ext

Se você não tem controle sobre a configuração do servidor, então, armazenar no banco de dados ou enviar para um host de terceiros, como o Amazon S3, é sua melhor aposta.

Veja também: