Dúvidas no Upload
01 - Usamos essa logica de continuar a imagem com mesmo nome, como visto a imagem é substituida.
Mais caso a imagem utilizada no cadastro se uma imagem JPG e a utilizada na atualização seja uma PNG com transparência a mesma será nomeada com JPG e perderá suas propriedades. Se estou correto, como posso resolver isto?
02 - Esse metodo utilizado no exemplo pode ser utilizado para qualquer tipo de arquivo? (jpg, png, mp3, pdf) ?? Se sim, como posso validar para permitir somente arquivos específicos?
03 - Existe alguma forma de resolver essa questão do cache, onde a imagem de fato so é substituida na view após um crtl + f5 ?
Olá, Antonio!
Tudo bem?
Nesse caso você pode deletar o arquivo (imagem) e fazer um novo upload.
Veja um exemplo básico:
public function update(StoreUpdateProductFormRequest $request, $id)
{
if (!$product = $this->product->find($id))
return redirect()->back();
$data = $request->all();
if ($request->hasFile('image') && $request->file('image')->isValid()) {
// Remove a imagem caso já exista!
if ($product->image) {
// Não pode esquecer: use Storage;
if (Storage::exists("{$this->path}/{$product->image}"))
Storage::delete("{$this->path}/{$product->image}");
}
$name = kebab_case($request->name);
$extension = $request->image->extension();
$nameFile = "{$name}.{$extension}";
$data['image'] = $nameFile;
$upload = $request->image->storeAs($this->path, $nameFile);
if (!$upload)
return redirect()->back()->withError('Falha no upload');
}
$product->update($data);
[...]
}
Nesta parte de sua resposta:
// Não pode esquecer: use Storage;
if (Storage::exists("{$this->path}/{$product->image}"))
Storage::delete("{$this->path}/{$product->image}");
Storage é uma classe? Onde ela está?
e de onde ou onde foi setado o {$this->path} ?
Olá, Antonio!
Esse foi apenas um exemplo que tenho pronto, precisa adptar ao seu projeto.
Storage é uma Facade do Laravel, precisa usar ela:
use Storage;
$this->path é apenas um atributo da minha classe, onde armazenei o path de upload. Mas, no seu caso pode ficar assim:
// Existe a imagem, então precisa deletar antes de fazer upload novamente:
if ($nomeObjeto->image) {
// Não pode esquecer: use Storage;
if (Storage::exists("nomediretorio/{$nomeObjeto->image}"))
Storage::delete("nomediretorio/{$nomeObjeto->image}");
}
Precisa estar logado para conseguir responder a este ticket!
Clique Aqui Para Entrar!