Laravel:文件上传无效

时间:2018-01-25 13:29:34

标签: php laravel laravel-5

我正在尝试通过Laravel 5.5中的HTML表单上传图像。我已经包含了enctype="multipart/form-data"属性,但仍未发生任何事情。

表格代码:

<form method="POST" enctype="multipart/form-data">
  {{ csrf_field() }}
  <div class="form-group">
    <label for="m_photo" class="col-md-4 control-label">Main photo</label>
    <div class="col-md-6">
      <input id="m_photo" type="file" class="form-control-file space" name="m_photo" required>
    </div>
  </div>

  <div class="form-group">
    <div class="col-md-6 col-md-offset-4">
      <button type="submit" class="btn btn-primary">Submit</button>
    </div>
  </div>
</form>

路由(web.php)代码:

Route::post('smartphones/entry', 'HomeController@s_submit')->name('s_submit');

控制器代码:

public function s_submit() {
  if (Input::hasFile('m_photo')) {
      // doing something
  }

  else {
      echo 'Nothing happened';
  }
}

'当我提交表格时,没有发生任何事情'。“

有趣的是,当我这样做时:

public function s_submit(Request $request) {
    $input = Input::all();
    dd($input);
}

我明白了:

array:1 [
"m_photo" => UploadedFile {#210 ▶}
]

就像图像 被传递一样,但我无法检索它。请帮忙。

6 个答案:

答案 0 :(得分:3)

当PHP max_file_size未设置为允许发送您尝试上传的文件的大小时,可能会发生这种情况。这会导致hasFile返回false,例如,file->getClientOriginalName()有效。

尝试检查php.ini中的upload_max_filesizepost_max_size,或尝试使用较小的文件检查它是否有效。

答案 1 :(得分:1)

获取文件:

$file = $request->m_photo;

或者用:

$file = $request->file('m_photo');

https://laravel.com/docs/5.5/requests#retrieving-uploaded-files

答案 2 :(得分:1)

email

答案 3 :(得分:0)

试试这个:

public function s_submit()
{
            request()->validate([
                'm_photo' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
            ]);

            $imageName = time().'.'.request()->m_photo->getClientOriginalExtension();
            request()->m_photo->move(public_path('images'), $imageName);
            return back()
                ->with('success','You have successfully upload image.')
                ->with('m_photo',$imageName);
}

刀片:

{!! Form::open(array('route' => 's_submit','files'=>true)) !!}
<div class="form-group">
    <label for="m_photo" class="col-md-4 control-label">Main photo</label>
    <div class="col-md-6">
{!! Form::file('m_photo', array('class' => 'form-control-file space')) !!}
    </div>
  </div>
  <div class="form-group">
    <div class="col-md-6 col-md-offset-4">
      <button type="submit" class="btn btn-primary">Submit</button>
    </div>
  </div>
{!! Form::close() !!}

答案 4 :(得分:0)

您忘记在html表单中添加操作:

  

put action =“/ smartphones / entry”或action =“{{route('s_submit')}}”

<form method="POST" enctype="multipart/form-data" action="{{route('s_submit')}}">
  {{ csrf_field() }}
  <div class="form-group">
    <label for="m_photo" class="col-md-4 control-label">Main photo</label>
    <div class="col-md-6">
      <input id="m_photo" type="file" class="form-control-file space" name="m_photo" required>
    </div>
  </div>

  <div class="form-group">
    <div class="col-md-6 col-md-offset-4">
      <button type="submit" class="btn btn-primary">Submit</button>
    </div>
  </div>
</form>
  

在公用文件夹中创建图像文件夹

控制器中的

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;


public function s_submit(Request $request) {
  if($request->hasFile('m_photo')){
            $filenameWithExt=$request->file('m_photo')->getClientOriginalName();
            $filename=pathinfo($filenameWithExt,PATHINFO_FILENAME);
            $extension=$request->file('m_photo')->getClientOriginalExtension();
            $fileNameToStore=$filename.'_'.time().'.'.$extension;
            request()->m_photo->move(public_path('images'), $fileNameToStore);
        }
        else{
           $fileNameToStore='noimage.jpg';      
        } 
}

答案 5 :(得分:0)

对于将来的访客,可接受的答案是正确的答案。 我想再分享一件事。 我也面临类似的问题,我已经将upload_max_filesizepost_max_size变量设置为20M,这已经足够了。 但是我仍然面临这个问题。因此,我增加到500M,然后它起作用了。 真的很奇怪,因为我上传的文件小于1 MB。