imagens no laravel
[Finalizado Pelo Aluno]
Boa noite, estou fazendo trabalho para uma empresa que vou precisar fazer upload de uma imagem e dps ela irá aparecer em uma tabela de cadastro.
Então estou fazendo um projeto pessoal lado a lado com esse trabalho, porém meu projeto é mais simples.. cadastro de categorias de jóias: Ex: Anel, Colar, etc..
e cadastro dos produtos que estão ligados as categorias..
enfim essa parte inicial eu consegui fazer.. porém resolvi acrescentar uma imagem dos produtos, então fui acompanhando o curso do sistema de viagens onde é incluido uma imagem na parte de voos..
Segue meu código da controller
$this->validate($request, [
'name' => 'required',
'price' => 'required',
'image' => 'image|max:2000'
]);
$products = $request->all();
if ($request->hasFile('image') && $request->file('image')->isValid()) {
$extension = $request->image->extension();
$nameFile = uniqid(date('HisYmd'));
$nameFile = "{$nameFile}.{$extension}";
if (!$request->image->storeAs('produtos', $nameFile)) {
return redirect()
->back()
->withInput();
}
}
Seguindo o curso, eu alterei na parte de config.. no filesystem, eu alterei la para public.. logo após eu fiz o artisan storage:link
e no meu front na index na hora que vai mostrar a imagem eu direciono assim
<td>
@if($product->image)
<img src="{{url("storage/produtos/{$product->image}" )}}"
alt="{{$product->id}}"
style="max-width: 400px;">
@else
<img src="{{url("assets/img/no-image.png")}}"
alt="{{$product->id}}"
style="max-width: 400px;">
@endif
</td>
O meu problema é na hora de mostrar a imagem, ele não está pegando a imagem e jogando pra index, qnd eu faço o upload da imagem ele sobe certo para a pasta storage/produtos.. qnd vai mostrar a imagem não aparece nada.
Olá Yuri, tudo bem?
Pelo o que descreveu o seu upload está OK, a lógica ficou correta.
O arquivo está sendo salvo corretamente em storage/app/public/produtos/nomearquivo.png, certo?
A forma como exibiu a imagem também está OK.
Pode que ficou errado ao salvar o nome da imagem no banco de dados.
Conferindo o registro após ser inserido, o nome do arquivo de imagem foi para o banco corretamente?
Faltou incluir:
$products['image'] = $nameFile;
no banco ficou salvo assim .. /private/var/folders/_1/8q8bgq6j00x26rp3hm7d42nh0000gn/T/phpornVwH
porém na storage o arquivo ta com nome diferente, se esse for o problema como corrigir isso ?
Sim amigo, esse foi o problema;
Como quando fez o upload você não alterou o valor do array $products na posição image, ele salvou com o nome do arquivo temporário.
Como resolver?
Da forma como mostrei:
if ($request->hasFile('image') && $request->file('image')->isValid()) {
$extension = $request->image->extension();
$nameFile = uniqid(date('HisYmd'));
$nameFile = "{$nameFile}.{$extension}";
$products['image'] = $nameFile;
if (!$request->image->storeAs('produtos', $nameFile)) {
return redirect()
->back()
->withInput();
}
}
Ao salvar um novo registro vai dá certo, porque o nome do arquivo vai ser salvo corretamente.
Valeu Carlos, agora foi!! muito obrigado pela ajuda!
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!