【问题标题】:Call to a member function getClientOriginalName() on null在 null 上调用成员函数 getClientOriginalName()
【发布时间】:2018-09-29 12:40:54
【问题描述】:

我可以使用我的 api 成功地将我的文件上传到 amazon s3 存储桶,并且我可以得到响应:

但是当我将此 api 集成到我的应用程序中时,它会说 Call to a member function getClientOriginalName() on null 我不知道我在哪里做错了:

我的Api方法:

public function uploadToAws(Request $request) {
    $file = $request->file('image');
    $imageName = 'company_logo/' . $file->getClientOriginalName();
    Storage::disk('s3')->put($imageName, file_get_contents($file));
    Storage::disk('s3')->setVisibility($imageName, 'public');
    $url = Storage::disk('s3')->url($imageName);
    $resultArray = ['status' => 1, 'message' => 'File uploaded to s3 bucket!', 'dataArray' => $url];

    return Response::json($resultArray, 200);
}

以及我对此 api 的回应:

{
    "status": 1,
    "message": "File uploaded to s3 bucket!",
    "dataArray": "https://spikessales.s3.amazonaws.com/company_logo/template3.jpg"
}   

我可以使用这个 api 完美地将文件上传到 s3 存储桶:

但是当我集成到我的应用程序视图时,它显示调用成员函数 getClientOriginalName() on null 我不知道我错在哪里:

此视图代码使用ajax调用:

       ///upload logo sec
     $(document).on('click', '.browse', function () {
   var file = $(this).parent().parent().parent().find('.changefle');
   file.trigger('click');

  });
   $(document).on('change', '.changefle', function () {
    var imagename = "";

    $.each($(".changefle")[0].files, function (i, file) {
    imagename = file.name;

});
    $.ajax({//Process the form using $.ajax()
    type: 'post', //Method type
    url: 'http://127.0.0.1:8000/api/upload_aws', //Your form processing file 
     URL
    data: {
        image: imagename
    }, //Forms name
    dataType: 'json',
    success: function (data) {
        console.log(data);
        // localStorage.setItem("set-compylogo", companylogo);
       },
       error: function (data) {

           console.log("error");
       }

我们将非常感谢您的帮助!

【问题讨论】:

  • 我认为你的表单文件是真的不可用。
  • 我不知道其他人正在集成我的 api 的视图文件
  • $request->file('image'); is 可能为空
  • 请提供任何解决方案
  • if ($request->hasFile('image')) { } 尝试输入条件并检查

标签: php laravel amazon-s3 image-uploading


【解决方案1】:

这可能是您的 ajax 需要更多标头来上传文件。或者可能需要这个:

$.ajax({
    headers: {
        'X-CSRF-TOKEN': your_crsf_token,
        'Content-type: text/html;charset=ISO-8859-1'
    },
    ...
});

如需更多信息,您可能需要查看:AJAX File Upload with XMLHttpRequest

【讨论】:

    【解决方案2】:

    您发送的是字符串(图像名称)而不是 FILE 对象。要使用这些方法,laravel 需要一个文件对象。所以imagename = file; 而不是imagename = file.name

    【讨论】:

    • 将 contentType: 'multipart/form-data' 添加到您的 ajax 调用中,可能您必须删除 dataType: 'json'
    • Uncaught TypeError: Illegal invocation at o (jquery.js:6) at gn (jquery.js:6) at gn (jquery.js:6) at Function.x.param (jquery.js :6) 在 Function.ajax (jquery.js:6) 在 HTMLInputElement. (custom-script.js:392) 在 HTMLDocument.dispatch (jquery.js:5) 在 HTMLDocument.v.handle (jquery.js :5)
    • 这是回复
    猜你喜欢
    • 2018-04-03
    • 2020-04-15
    • 2021-11-25
    • 1970-01-01
    • 2013-12-01
    • 2016-12-19
    • 1970-01-01
    • 2018-08-26
    • 2017-07-02
    相关资源
    最近更新 更多