【问题标题】:Call to a member function getClientOriginalExtension() on string in Laravel在 Laravel 中调用字符串上的成员函数 getClientOriginalExtension()
【发布时间】:2020-01-08 02:45:02
【问题描述】:

我正在尝试在我的 Laravel 项目中使用 AJAX 上传带有图像的表单。但是我遇到了错误

在字符串上调用成员函数 getClientOriginalExtension()

我找不到解决办法。

html 表单

<form id="edit_form" enctype="multipart/form-data">
<input type="hidden" name="_token" id="csrf-token" value="{{ Session::token() }}" />

<div class="form-group">
    <label>Image</label>
    <input id="edit_form_image" type="file" class="form-control" name="user_image">
</div><!-- end form-group -->

<div class="form-group">
    <label>Name</label>
    <input id="edit_form_name" type="text" class="form-control" value="{{Auth::user()->name}}">
</div><!-- end form-group -->

<div class="form-group">
    <label>Profession</label>
    <input id="edit_form_profession" type="text" class="form-control"  value="{{Auth::user()->profession}}">
</div><!-- end form-group -->

<button type="button" id="edit_form_submit" class="btn btn-orange">Save Changes</button>

ajax 部分

$('#signin_button').click(function(event) {

var edit_form_image = $('#edit_form_image').val();
var edit_form_name = $('#edit_form_name').val();
var edit_form_profession = $('#edit_form_profession').val();

$.ajax({

           url:"{{ url('/profile-update') }}",
           data: {image: edit_form_image, name: edit_form_name, profession: edit_foredit_form_professionm_email,  _token: token},
           dataType:'json',
           async:false,
           type: 'POST',
           processData: false,
           contentType: false,
           success:function(msg)
           {
               console.log(msg);
           }                      
       });

});

控制器

public function profile_update()
{
$this->validate(request(), [
    'name' => 'required',
    'profession' => 'required'
]);

$imageName = time().'.'.request('image')->getClientOriginalExtension();

request()->image->move(public_path('images'), $imageName);

$user = Auth::user();

$user->name = request('name');
$user->profession = request('profession');
$user->avatar = $imageName;

$user->save();

return '1';

}

问题出在哪里以及如何解决?

有人帮忙吗?

【问题讨论】:

  • 向我们展示您的完整控制器。
  • 你必须改用表单数据
  • @SalmanZafar...而不是什么兄弟...你能解释一下吗?
  • 只有使用 ajax 和 FormData 才能传递图像。 Multipart/form-data 不适用于 AJAX
  • @Script47...我已经用控制器更新了我的鳕鱼

标签: php html ajax laravel image-upload


【解决方案1】:

要从请求中获取文件,您应该使用以下代码:

$imageName = time().'.'.request()->file('image')->getClientOriginalExtension();

这将为您提供UploadedFile 实例,而不是路径。

【讨论】:

    【解决方案2】:

    你必须改用formdata

    $('#signin_button').click(function(event) {
    
    var fd = new FormData();
    
    var edit_form_image = $('#edit_form_image')[0].files;
    var edit_form_name = $('#edit_form_name').val();
    var edit_form_profession = $('#edit_form_profession').val();
    
    fd.append( 'image', edit_form_image );
    fd.append( 'name', edit_form_name );
    fd.append( 'profession', edit_form_profession );
    
    $.ajax({
    
               url:"{{ url('/profile-update') }}",
               data: fd,
               dataType:'json',
               async:false,
               type: 'POST',
               processData: false,
               contentType: false,
               success:function(msg)
               {
                   console.log(msg);
               }                      
           });
    

    谢谢

    【讨论】:

    • 抱歉小弟回复晚了。使用您的代码传递数据时,我没有收到任何错误。但是如何在控制器中接收这些数据?我用过request('image'),也用过Input::hasFile('image')。但没有变化。
    猜你喜欢
    • 1970-01-01
    • 2016-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多