Laravel:$ request-> hasFile()不起作用

时间:2017-01-17 13:04:10

标签: php laravel file-upload laravel-5.3

我有一个表单,我可以获得titledescriptionimage。当我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数据库表字段为空。

if($request->hasFile('project_image'))没有获得该字段,

此外,我的表单方法为POSTenctype="multipart/form-data",且文件为<input type="file" name="project_image" id="project_image">

我做错了什么?

7 个答案:

答案 0 :(得分:11)

如果您的代码中的所有内容都已更正,那么您可能会错过 enctype ,我在启动时也错过了

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

或者,如果您使用表单助手,则 file = true 字段中可以轻松包含该类型。

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

答案 1 :(得分:4)

请确保您的表单定义中有'file' => true选项,如下所示:

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

此选项会导致您的表单将使用HTML表单标记中的enctype="multipart/form-data"选项进行呈现,这是使用form上传文件所必需的

或者,如果您使用的是html表单,请确保您拥有enctype="multipart/form-data"之类的内容:

答案 2 :(得分:3)

错误不在您的后端代码中。看起来这是你的前端代码中的一个错误。

正如您所看到的,dd($ request-&gt; 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 :(得分:2)

您需要在php.ini中检查php指令 upload_max_filesize

通常将其大小定义为2M。 如果您上传的文件大于此大小

Laravel函数

  

$ request-> hasFile()

将返回 false

希望有帮助!

答案 4 :(得分:0)

文件是否存储在服务器上?因为您提到project_image字段为空,但您永远不会将任何内容保存到project_image,但您确实尝试使用img $project->img = $filename;字段>

答案 5 :(得分:0)

我正在使用Laravel 5.5,这对我有用(在Laravel Docs https://laravel.com/docs/5.5/requests#files上找到了它)

我替换了

if($request->hasFile('project_image')){...}

使用

if ($request->file('project_image')!=null){...}

答案 6 :(得分:0)

我遇到了这个问题,但对我来说,问题是我使用了 Form::model 而不是 Form::open。 应该是:

{!! Form::open(['url'=>'user/profile/' . $user->id, 'files'=>true) !!}