[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Abraão Almeida Marques
Criador Abraão Almeida Marques 03/06/2018

Carlos, boa noite.

No processo de atualização de imagem, notei que não há um método para remover a imagem que está sendo substituída. Porém, a remoção dela ocorreu assim mesmo.

Achei que fosse necessário um método parecido com o unlink() para fazer isso.

Por que isso ocorre? O Laravel reconhece a atualização e automaticamente faz isso?

 

Um abraço.

Manager Carlos Ferreira 03/06/2018

Olá, Abraão!
Tudo bem?

Uma excelente pergunta você fez.
Quando fazemos o upload de uma imagem com o mesmo nome a imagem antiga é sobreposta, ou seja, a nova imagem substitui a antiga.

Se quiser deletar a imagem antiga antes de fazer um novo upload (no momento de editar), pode usar essa lógica:
// Não esquece: use Illuminate\Support\Facades\Storage;
if($flight->image) {
    if (Storage::exists("flights/{$flight->image}"))
        Storage::delete("flights/{$flight->image}");
}

Carlos Ferreira
Criador Abraão Almeida Marques 03/06/2018

Carlos,

Obrigado pelo retorno.

Há alguns meses fiz um sistema em Laravel que ler um webservice de produtos para pegar todos os produtos e imagens. As imagens, ainda tinham que passar por uma autenticação em HTTP. Bem chatinho de fazer. De fato, isso estava acontecendo: toda vez que executava a integração, não duplicava a imagem, mas substituia a imagem já existente, mas não entendia o porquê disso. E, como funcionava, deixei quieto.

Agora, se fizer o upload para o diretório public, por exemplo, public/banners, você precisa de remover a imagem no processo de atualização. Tem que ter um método para remoção da imagem:

 

            $filename = md5(time().$image->getClientOriginalName()).'.'.$image->getClientOriginalExtension();

            $destinationPath = public_path(self::PATH_IMAGE);

            File::delete($destinationPath.'/'.$current_image);

 

Mais ou menos isso, aí.

 

Agora, aí vai mais uma dúvida:

Estou usando o servidor embutido do PHP para acompanhar o curso, o Docker não roda no Windows 10 Home nem com reza forte! Então, resolvi usar o servidor embutido do php mesmo.

A dúvida, é a seguinte: na url localhost:8000 não é possível exibir a imagem que foi armazenada no storage.

O print da imagem, no HTML, ocorre numa boa:

<td>

<img src="http://localhost:8000/storage/flights/002231201806045b14864738126.jpeg" style="max-width:70px">

</td>

Mas, não exibe a imagem. No console do browser, mostra erro 404.

Eu sei que se eu jogar isso para uma outra url, tipo: dominio.com.br/storage/etc a imagem exibirá numa boa. A encrenca está no localhost:8000 mesmo.

Sabe como resolver isso?

Se não souber, tranquilo. Isso não está atrapalhando no entendimento do curso.

 

Valeu.

 

Um abraço.

Abraão Almeida Marques
Manager Carlos Ferreira 03/06/2018

Olá, Abraão!

O primeiro caso pelo o que entendi, posso deduzir que talvez seja algum cache do Webservice, isso talvez podia tá retornando o conteúdo com cache, e por esse motivo essa questão da imagem. Apenas uma hipótese. Precisaria de detalhes e testes para chegar na verdadeira causa do problema.

O segundo problema não se trata de um problema com o modo como acessa o projeto (http://localhost:8000)
Só de acessar sem ter URL sobrando "/public" já funciona da mesma forma como se estivesse acessando diretamente por um domínio "dominio.com.br"

Acontece o seguinte, arquivos devem ser armazenados em storage/app/
Agora se for uma arquivo que precisa exibir posteriormente, como uma imagem posteriormente neste caso deve ser armazenada em storage/app/public/

Acontece o seguinte, quando precisa recuperar um arquivo em storage/app/public/ para exibir no Browser (como uma imagem) precisa estar de alguma forma ligado ao diretório public/ do Laravel.
Por isso quando rodamos o comando: php artisan storage:link ele cria um link simbólico (atalho) de storage/app/public/ para public/storage/
Ao acessar uma imagem que está em public/storage/nome-image.png na realidade ela não está neste diretório, mas sim em storage/app/public/nome-image.png

Ficou claro amigo?

Carlos Ferreira
Criador Abraão Almeida Marques 03/06/2018

Carlos, boa noite.

Obrigado pelas explicações.

Ficaram claras, sim.

 

Um abraço.

Abraão Almeida Marques
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!