Dropzone: rescatar la imagen mandanda

Desde el form de la view se envía a una ruta: controller o a un componente de Livewire y para rescatarlo:
<form action="{{ route('admin.product.storeImagenes', $product) }}" method="POST" class="dropzone"id="my-awesome-dropzone">

Y desde el controller o componente Livewire al que apunte esa ruta:
use Illuminate\Support\Facades\Storage;
...
public function storeImagenes(Product $product, Request $request) {
    $request->validate([
       'fichero' => 'required|image|max:2048'
    ]);
    $url = Storage::put('products', $request->file('fichero'));

    $product->images()->create([
       'url' => $url
    ]);
}

Storage::put lo almacena en donde lo tengas configurado enconfig\filesystems.php:
'default' => env('FILESYSTEM_DRIVER', 'public'),

Por ejemplo en este caso lo almacenaría físicamente dentro de la carpeta: C:\xampp\htdocs\miproyecto\public\storage\products

Para el caso de borrar desde la view:
deleteImagen({{ $image->id }})
Y desde el método del controller o del componente livewire:
public function deleteImagen(Image $image) {
    Storage::delete([$image->url]); // eliminarla físicamente
    $image->delete(); // borrar de la BD
    $this->product = $this->product->fresh();
}

EJEMPLO GENERAL DEL DROPZONE:
Dropzone.options.myAwesomeDropzone = {
headers: {
'X-CSRF-TOKEN': '{{ csrf_token() }}'
},
paramName: "fichero",
dictDefaultMessage: "Arrastra aquí las imágenes que quieras subir",
acceptedFiles: "image/*",
maxFilesize: 2, // MB
maxFiles: 4,
complete: function(fichero) {
this.removeFile(fichero);
},
queuecomplete: function() { // se ejecuta cuando se hayan subido todos los q estén en la cola
Livewire.emit('refreshProduct');
},
accept: function(file, done) {
if (file.name == "xxxx") {
done("xxxx");
}
else { done(); }
}
};

No hay comentarios:

Publicar un comentario