Solucionado (ver solução)
Solucionado
(ver solução)
9
respostas

Como chegar a imagem da capa sem precisar escrever o caminho inteiro?

Na classe fileSaver, no exemplo mostrado é criado um public static final String SERVER_PATH, onde põe-se apenas /casadocodigo. Porém, apenas consigo acessar as capas em execução quando coloco o path inteiro desde o C:. Como arrumar isso ?

9 respostas

Fala Marcelo, tudo bem ?

Onde as capas estão sendo salvas? Se as capas estão sendo salvas em um diretório externo ao acessível pela sua aplicação, creio que não tem muito jeito mesmo. Aí imagino que seja melhor isolar seu código de acesso (em alguma classe de serviço, infra ou algo do tipo como o FileSaver) aos recursos e consumir esse caminho base pros arquivos através de alguma variável de ambiente do sistema ou outra forma de não deixar o caminho fixo no código (hard coded, ruim pra manutenção).

As capas estão sendo salvas em C:..\Desktop...\Estudos\Loja De Jogos\lojadejogos\jogos No caso dentro de lojadejogos estão os arquivos .settings src, target, classpath e etc

Fala Marcelo, tudo bem ?

Bom, pelo que eu entendi, lojadejogos é a pasta do projeto e jogos a pasta com as capas. Se esta pasta com os arquivos estiver dentro de src/main/webapp do projeto (que é a pasta raiz que será implantada no servidor) é possível recuperar o caminho real através de:

String caminhoParaAPasta = request.getServletContext().getRealPath("\jogos");

Lembre-se que é assim inclusive que é feito no vídeo. Você vai conseguir o caminho real pra essa pasta dentro do servidor.

Caso esteja fora, não tem jeito, vai ter que ser com o caminho absoluto mesmo (C:\etc\etc...).

Espero ter ajudado. Abraço!

Deixe-me ver se entendi, a pasta \jogos que contém as capas deve estar em ' src/main/webapp' ? Assim ficando src/main/webapp/jogos/exemploDeCapa.jpg ?

solução!

Isso Marcelo..

Lembre-se que a pasta webapp (ou WebContent em outras organizações de projeto web) é a pasta cujo conteúdo vai direto para o servidor http. Então tudo que está dentro dela será colocado à disposição na web.

É dessa mesma forma que conseguimos expor imagens, scripts, CSSs etc necessários ao nosso projeto. Se a pasta jogos estiver diretamente dentro desta pasta será possível obter seu diretório completo a partir do código citado.

Abraço!

Isso é ótimo para desenvolvimento, mas se você colocar dessa forma em produção é possivel que você perca seu emprego no primeiro deploy. As capas são arquivos "dinâmicos" fornecidos pelos usuários através dos uploads e não arquivos fixos fornecidos por sua aplicação como ícones, js e css. No caso a cada deploy vc iria simplesmente apagar todas as capas.

O mais comum é vc salvar os arquivos de upload em alguma pasta dentro do servidor de aplicações. Você pode também enviar os arquivos para um servidor de ftp, ou contratar serviços especializados de armazenamento de arquivos como o Amazon S3

Geralmente quando você hospeda sua aplicação vc não tem a mínima idéia da estrutura de diretórios do Host. eu geralmente salvo meus uploads na raiz do SO

Path path = FileSystems.getDefault().getPath(System.getenv("HOME"),"Documentos");

dessa forma ele vai encontrar o caminho tanto no meu computador localmente /home/ricardo/Documentos quanto no host de hospedagem /raizdahospedagem/Documentos

Bem observado Ricardo,

No curso a abordagem e simplesmente para desenvolvimento, não contamos com nenhuma infraestrutura adicional para expor o arquivos, isso ajuda a manter o foco no código necessário e a API do Spring em si.

Mas sua observação é perfeita, é cada dia mais comuns usar serviços especializados para salvar os arquivos em produção, e nesse ponto o Simple Storage Service realmente tem bastante destaque. Para ter menor disparidade nesse caso, entre o código de desenvolvimento com o de produção, podemos contar com um serviço que emula localmente o S3 da amazon, o S3 Ninja (https://s3ninja.net/). Usando esse serviço podemos contar com a mesma API utilizada para salvar nossos arquivos no S3, e facilitar bastante os testes. Com uma boa configuração prevendo separação de ambientes de teste e produção já podemos escrever um código único no que tange a persistência desses arquivos estáticos.

Obrigado por contribuir! Abraço

Obrigado Ricardo e Rafael. Ótimas explicações!