简体   繁体   中英

Call to a member function getClientOriginalName() on null

I can upload my file using to amazon s3 bucket successfully using my api and i can get a response:

But when i integrate this api into my application it says Call to a member function getClientOriginalName() on null i dont know where i am doing wrong:

My Api method:

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);
}

and my response of this api:

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

I can perfectly upload file to s3 bucket using this api:

But when i integrate to my application view it says Call to a member function getClientOriginalName() on null i dont where i am wrong:

This view code using ajax call:

       ///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");
       }

Your help will be highly appreciated!

It might be your ajax need more headers to upload file. or may be it need this:

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

For further information, you might want to check this out: AJAX File Upload with XMLHttpRequest

You are sending a string (image name) instead of a FILE object. To use those methods laravel needs a file object. So imagename = file; instead of imagename = file.name

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM