Gabo Ruiz
Gabo Ruiz

Reputation: 556

Laravel backend not saving to database

I'm uploading files using laravel as backend API REST. When I upload a file in the frontend, it sends a 200 OK status code in the response, but doesn't save it to the database. Something weird that I see it's that in the response the data comes empty, and the array of the files comes in the config section of the response. 200 ok response

This is the controller that handles this situation

 public function makeFile(Request $request)
    {
        $fileArray = [];
    if (isset($request->files) && is_array($request->files)) {
        foreach ($request->files as $key => $fileEntity) {
            $file= new File();
            $file->file=$fileEntity['file'];
            $file->shipment_id=$fileEntity['shipment_id'];
            $file->user_id=$fileEntity['user_id'];
            $file->date=date('Y,m,d,G,i,s');
            $file->fileName=$fileEntity['fileName'];
            $file->fileType=$fileEntity['fileType'];
            $file->status=$fileEntity['status'];
            $file->save();

            $fileArray[] = $file;
        }
    }
    return response()->json($fileArray);
    }

This is my form

<uib-tab index="1" heading="Files">
                        <div class="row">
                        <label>Add File</label>
                            <ul class="shipment__files">
                                <li class="col-xs-12 col-md-6" ng-repeat="file in shipment.shipmentObject.files">
                                    <a href="#"><img ng-src="{{ file.iconURL }}" width="60"></a>
                                    <div class="filename"><a href="#">{{ file.fileName }}</a></div>
                                    <div class="date">{{ file.date }}</div>
                                    <div class="uploader">{{ file.user_id }}</div>
                                </li>
                            </ul>
                        </div>
                        <!-- <form>
                        <input type="file" name="" ng-model="shipment.shipmentObject.file">
                        <button class="btn btn-primary" ng-click="shipment.makeFile(shipmentObject.file)" >Upload File</button>

                        <div>aa {{ newFile }}</div>
                        </form> -->
                        <div>
                          <input data-my-Directive type="file" name="file" ng-model="shipment.shipmentObject.file">
                          <p>
                            post request with this data:
                          </p>
                          <pre ng-repeat="(key, value) in fileLog">
                            {{key}} {{ value }}
                          </pre>
                        </div>

                    </uib-tab>

Upvotes: 0

Views: 190

Answers (1)

giolliano sulit
giolliano sulit

Reputation: 1006

So you're getting an empty response because your conditional statement isn't matching, so you're just returning that empty $fileArray you created:

if (isset($request->files) && is_array($request->files))

The correct way to check if there are files is to go:

if($request->hasFile('file'))

Everything you need to know about this is available in the official documentation here:

https://laravel.com/docs/5.4/requests#files

Upvotes: 0

Related Questions