[PROMOÇÃO] Assine com + 30% de desconto ANUAL MENSAL (últimas horas)
Marcelo_Ferreira
Criador Marcelo_Ferreira 05/11/2021

Carlos, boa tarde!

 

Na aula 16 estou encontrando a mensagem de erro:GET http://lara-repositories.test/storage/app/posts/teste-foto1.JPG 404 (Not Found)

 

O que eu já verifiquei:

01) NOme no banco de Dados:posts/teste-foto1.JPG;

02) URL da foto no browser: <img src="http://lara-repositories.test/storage/app/posts/teste-foto1.JPG" alt="Teste Foto1" style="max-width=100px;">;

03) URL no Visual Studio Code: Projects/Docker/cursos/lara-repositories/storage/app/posts/teste-foto1.JPG;

04) Revisei o código várias vezes tendo como referência a aula.

Abaixo segue o código da página index.

<h1>Posts</h1>

@foreach ($posts as $post)
<p>
<img src="{{ url("storage/app/{$post->image}") }}" alt="{{$post->title}}" style="max-width=100px;"><br/><br/>
{{$post->title}}
[
<a href="{{route('posts.show', $post->id)}}">Ver</a> |
<a href="{{route('posts.edit', $post->id)}}">Editar</a>
]
</p>
@endforeach

 

Desde já agradeço a ajuda.

Att

Marcelo

 

Criador Marcelo_Ferreira 05/11/2021

Carlos, só complementando, após eu digitar no terminal o comando: ll public/ o terminal mostrou o caminho abaixo.

/var/www/cursos/lara-repositories/storage/app/public/

 

Att

Marcelo

Marcelo_Ferreira
Manager Carlos Ferreira 05/11/2021

Olá, Marcelo!
Tudo bem?

Os seus arquivos estão sendo upados para storage/app/ e não para storage/app/public/ como deveria ser.

No seu arquivo .env mude o valor da variável de ambiente FILESYSTEM_DRIVER para public:
FILESYSTEM_DRIVER=public

Após isso, repita o processo de upload que vai dar certo, vai mover os arquivos para o diretório correto.

Depois na view, faça:
{{ url("storage/{$post->image}") }}

Carlos Ferreira
Criador Marcelo_Ferreira 05/11/2021

Carlos,

eu já tinha configurado a variável FILESYSTEM_DRIVER=public no meu arquivo .env, apenas alterei a view conforme você sugeriu e fiz upload da imagem novamente, porém, não funcionou!

Deletei a pasta app e no terminal criei um novo link através do comando: 'php artisan storage:link' e ele recriou a pasta app\posts e depois fiz um 'll public/', segue a saída abaixo.


lrwxrwxrwx  1 laradock root   52 Nov  6 00:03 storage -> /var/www/cursos/lara-repositories/storage/app/public

A única observação é que ficou com a linha em vermelho, porém, as imagens são salvas na pasta, só não carregam na página devido ao erro 404.

segue meu index atualizado.

@foreach ($posts as $post)
<p>
<img src="{{ url("storage/{$post->image}") }}" alt="{{$post->title}}" style="max-width=100px;"><br/><br/>
{{$post->title}}
[
<a href="{{route('posts.show', $post->id)}}">Ver</a> |
<a href="{{route('posts.edit', $post->id)}}">Editar</a>
]
</p>
@endforeach

 

Mensagem no console do browser:

GET http://lara-repositories.test/storage/posts/teste-foto.png 404 (Not Found)

Como o elemento img é carregado no Browser.

<img src="http://lara-repositories.test/storage/posts/teste-foto.png" alt="Teste Foto" style="max-width=100px;">

Path da foto 'teste-foto.png' no VSC

lara-repositories/storage/app/posts/teste-foto.png

 

Desde já agradeço a ajuda.

Att

Marcelo

 

 

 

 

Marcelo_Ferreira
Criador Marcelo_Ferreira 05/11/2021

Observação:

Já limpei o cache.
php artisan cache:clear
php artisan route:cache  
php artisan config:clear
php artisan view:clear

 

Infelizmente não resolveu.

Att

Marcelo

Marcelo_Ferreira
Manager Carlos Ferreira 05/11/2021

O seu link sombólico está correto.

A foto ainda está no path antigo: storage/app/posts/teste-foto.png

Quando mudou a variável de ambiente FILESYSTEM_DRIVER, você fez um novo upload?
Porque essse arquivo deve estar em storage/app/public/posts/teste-foto.png

Carlos Ferreira
Criador Marcelo_Ferreira 05/11/2021

Carlos, bom dia!

Deletei a pasta storage e recriei a mesma, depois criei o link simbólico e carregou as imagens, porém quando inseri outra foto foi criado a pasta posts fora da public novamente!

storage->app->posts->imagem.jpg (Quando crio um novo post a imagem vai para esta pasta e não é carregada)

storage->app->public->posts->imagem.jpg (Quando arrasto as imagens para esta pasta ela é carregada)

 

Resumindo, o problema ocorre no momento de armazenar a imagem, o sistema cria a pasta posts, caso não exista a mesma, logo abaixo de app (fora da pasta public) e insere a imagem.

 

Segue o código.

public function index() {

$posts = Post::orderBy('id', 'ASC')->paginate();

// dd($posts);

return view('admin.posts.index', compact('posts'));
}

public function create() {
return view('admin.posts.create');
}


public function store(StoreUpdatePost $request) {

$data = $request->all();
if ($request->image->isValid()) {
$nameFile = Str::of($request->title)->slug('-') . '.' .$request->image->getClientOriginalExtension();
$image = $request->image->storeAs('posts', $nameFile);
$data['image'] = $image;

}

Post::create($data);
return redirect()
->route('posts.index')
->with('message', 'Post Criado com sucesso');
}

StoreUpdatePost

public function authorize()
{
return true;
}

/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'title' => 'required|min:3|max:160',
'content' => ['nullable', 'min:5', 'max:1000'],
'image' => ['required', 'image']
];
}
}

Att

Marcelo

 

 

 

Marcelo_Ferreira
Criador Marcelo_Ferreira 05/11/2021

Carlos,

consultando a documentação do laravel resolvi alterar o código abaixo de:

$image = $request->image->storeAs('posts', $nameFile); // (Conforme recomendação da aula)

 para:

$image = $request->image->storeAs('posts', $nameFile, 'public');

E o problema foi resolvido, porém, queria entender se esta alteração é a forma 'correta' para resolver o problema? Pois na aula não consta o parâmetro 'public' e funcionou!! Por quê????

Obrigado.

Att

Marcelo

Marcelo_Ferreira
Manager Carlos Ferreira 05/11/2021

Quando fez isso forçou o upload para o drive public:
$image = $request->image->storeAs('posts', $nameFile, 'public');

O arquivo .env não armazena cache, portanto, como você mudou para isso, as configuraçõess estavam certas:
FILESYSTEM_DRIVER=public

A única explicação é cache no arquivo de config, experimenta deletar em bootstrap/cache/

Carlos Ferreira
Sabe a Solução? Ajude a resolver!

Precisa estar logado para conseguir responder a este ticket!

Clique Aqui Para Entrar!