web-dev-qa-db-fra.com

Comment télécharger des fichiers dans Laravel directement dans des dossiers publics?

Le serveur sur lequel j'héberge mon site Web ne prend pas en charge links. Par conséquent, je ne peux pas exécuter le php artisan storage:link pour lier mon répertoire de stockage au répertoire public. J'ai essayé de refaire la configuration du disque dans filesystems.php pour référencer directement le dossier public mais cela ne semble pas fonctionner non plus. Est-il possible de télécharger un fichier utilisant les bibliothèques Laravel directement dans le dossier public ou devrai-je utiliser une méthode php? Merci d'avance.

8
Fabiotk

Vous pouvez créer un nouveau disque de stockage dans config/filesystems.php

'public_uploads' => [
    'driver' => 'local',
    'root'   => public_path() . '/uploads',
],

Et stocker des fichiers comme ceci: 

if(!Storage::disk('public_uploads')->put($path, $file_content)) {
    return false;
}
23
sunomad

comme alternative,
laissez laravel définir le fichier stocké dans le dossier /storage/app.

si nous voulons lire le fichier, utilisez juste comme $publicPath = '../storage/app/'.$path;

0
Agus

Vous devriez essayer en espérant avoir ajouté method = "post" enctype = "multipart/form-data" à votre formulaire. Notez que le chemin public (.uploadedimages) sera déplacé vers votre dossier public dans le répertoire de votre projet et que sera l’image téléchargée. 

public function store (Request $request) {

  imageName = time().'.'.$request->image->getClientOriginalExtension();
  $request->image->move(public_path('/uploadedimages'), $imageName);

  // then you can save $imageName to the database

}
0
Willie Mwewa

Vous pouvez passer le disque à la méthode de la classe \Illuminate\Http\UploadedFile:

$file = request()->file('uploadFile');
$file->store('toPath', ['disk' => 'public']);

ou vous pouvez créer un nouveau disque système de fichiers et vous pouvez l'enregistrer sur ce disque.

Vous pouvez créer un nouveau disque de stockage dans config/filesystems.php:

'my_files' => [
    'driver' => 'local',
    'root'   => public_path() . '/myfiles',
],

dans le contrôleur:

$file = request()->file('uploadFile');
$file->store('toPath', ['disk' => 'my_files']);
0
Inoyatulloh

En plus de chaque réponse, je suggère d'ajouter une autre couche de protection car il s'agit d'un dossier public.

Pour chaque fichier que vous aurez dans votre dossier public et qui nécessite une protection, créez un itinéraire qui en vérifiera l’accès, comme

/files/images/cat.jpg

et route qui ressemble à /files/images/{image_name} afin que vous puissiez vérifier l'utilisateur par rapport à un fichier donné.

Après une validation correcte, vous ne faites que return response($full_server_filepath, 200)->header('Content-Type', 'image/jpeg');

Cela rend le travail un peu plus dur, mais beaucoup plus sûr

0