web-dev-qa-db-fra.com

Laravel : $ request-> hasFile () ne fonctionne pas

J'ai un formulaire où je reçois la title, description et une image. Lorsque i dd($requests->all());, le résultat suivant est correct.

array:4 [
  "projectTitle" => "asd"
  "project_description" => "asd"
  "project_image" => "15940723_1336567063030425_9215184436331587115_n.jpg"
  "_token" => "eUj27iioySvIgut5Afu0ZHMgeVrO99a9e1o7Tw0w"
]

Et je stocke les valeurs comme:

$project = new Portfolio;
$project->freelancer_id = Auth::user()->id;
$project->title = $request->get('projectTitle');
$project->description = $request->get('project_description');

if($request->hasFile('project_image')){
   $project_image = $request->file('project_image');
   $filename = time() . '.' . $project_image->getClientOriginalExtension();
   Image::make($project_image)->resize(197, 137)->save( public_path('/uploads/portfolios/' . $filename ) );
   $project->img = $filename;
}

$project->save();

Mais le champ de la table de base de données img obtient la valeur null.  

La if($request->hasFile('project_image')) n'obtient pas le champ, 

Aussi, j'ai forme où la méthode est POST et avoir enctype="multipart/form-data" et un fichier j'ai <input type="file" name="project_image" id="project_image">.

Qu'est ce que j'ai mal fait? 

6
user6519911

L'erreur n'est pas dans votre code de base. On dirait que c'est une erreur dans votre code frontal.

Comme vous pouvez voir la sortie de dd ($ request-> all ()) retourné

array:4 [
  "projectTitle" => "asd"
  "project_description" => "asd"
  "project_image" => "15940723_1336567063030425_9215184436331587115_n.jpg"
  "_token" => "eUj27iioySvIgut5Afu0ZHMgeVrO99a9e1o7Tw0w"
]

Votre project_image est juste une chaîne alors qu'il aurait dû s'agir d'un objet/instance UploadedFile comme ceci:

array:4 [
  "projectTitle" => "asd"
  "project_description" => "asd"
  "project_file" => UploadedFile {#30 
    -test: false
    -originalName: "15940723_1336567063030425_9215184436331587115_n.jpg"
    -mimeType: "image/jpeg"
    -size: 5126
    -error: 0
  }
  "_token" => "eUj27iioySvIgut5Afu0ZHMgeVrO99a9e1o7Tw0w"
]
2
Paras

Si tout se corrige dans votre code, il se peut que vous manquiez leenctype, j'avais également manqué cela au démarrage,

<form action="{{ route('store') }}" method="POST" enctype="multipart/form-data">

Ou si vous utilisez Form Helper, cette enctype est facilement incluse dans le champfile = true.

{!! Form::open(['route' => ['store'], 'file' => true]) !!}
9

Assurez-vous d'avoir une option 'file' => true dans votre définition de formulaire, comme ci-dessous:

{!! Form::open(['route' => ['uploadimage'], 'file' => true]) !!}

Cette option entraîne le rendu de votre formulaire avec l'option enctype="multipart/form-data" dans la balise HTML, qui est obligatoire pour télécharger un fichier à l'aide de form

Ou, si vous utilisez un formulaire html, assurez-vous que vous avez enctype="multipart/form-data" comme:

4
Mayank Pandeyz

Vous devez vérifier la directive php upload_max_filesize dans le fichier php.ini.

En général, sa taille est 2M définie comme valeur par défaut . Si vous téléchargez un fichier supérieur à cette taille 

Fonction de Laravel 

$ request-> hasFile ()

retournera faux

J'espère que ça aide!!

2
Mahesh Yadav

Le fichier est-il stocké sur le serveur? Parce que vous mentionnez que le champ project_image est null, mais que vous n'enregistrez jamais rien dans project_image, mais que vous essayez de sauvegarder dans le champ img avec $project->img = $filename;

0
Stephen Hendricks