[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
YuriTeixeira
Criador YuriTeixeira 03/10/2018

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..

Criador YuriTeixeira 03/10/2018

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();
}
}
YuriTeixeira
Criador YuriTeixeira 03/10/2018

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>
YuriTeixeira
Criador YuriTeixeira 03/10/2018

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.

YuriTeixeira
Manager Carlos Ferreira 03/10/2018

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;

Carlos Ferreira
Criador YuriTeixeira 03/10/2018

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 ?

YuriTeixeira
Manager Carlos Ferreira 03/10/2018

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.

Carlos Ferreira
Criador YuriTeixeira 03/10/2018

Valeu Carlos, agora foi!! muito obrigado pela ajuda!

YuriTeixeira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!