web-dev-qa-db-ja.com

Laravel:$ request-> hasFile()は機能していません

titledescriptionimageを取得するフォームがあります。 i dd($requests->all());の場合、正しい次を返します。

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

そして、私は値を次のように保存しています:

_$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();
_

ただし、img DBテーブルフィールドはnullになります。

if($request->hasFile('project_image'))はフィールドを取得していません。

また、メソッドがPOSTであるフォームがあり、_enctype="multipart/form-data"_があり、forファイルには_<input type="file" name="project_image" id="project_image">_があります。

何が間違っていますか?

9
user6519911

エラーはバックエンドコードにはありません。フロントエンドコードのエラーのようです。

ご覧のとおり、dd($ request-> all())の出力が返されます

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

きみの project_imageは単なる文字列ですが、次のようにUploadedFileオブジェクト/インスタンスである必要があります。

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"
]
3
Paras

コードのすべてが正しくなる場合、enctypeが欠落している可能性があります。

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

または、フォームヘルパーを使用する場合、そのenctypeはfile = trueフィールドに簡単に含まれます。

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

フォーム定義に以下のような'file' => trueオプションがあることを確認してください。

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

このオプションにより、HTMLフォームタグのenctype="multipart/form-data"オプションでフォームがレンダリングされます。これは、formを使用してファイルをアップロードするために必須です

または、htmlフォームを使用している場合は、次のようなenctype="multipart/form-data"があることを確認してください。

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

Php.iniでphpディレクティブpload_max_filesizeを確認する必要があります。

通常、そのサイズはデフォルトとして定義されている2Mです。このサイズを超えるファイルをアップロードする場合

Laravel関数

$ request-> hasFile()

falseを返します

それが役に立てば幸い!!

5
Mahesh Yadav

ファイルはサーバーに保存されますか? project_imageフィールドがnullであることに言及しているが、project_imageには何も保存していないが、$project->img = $filename;imgフィールドに保存しようとしているため

0