Reputation: 556
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.
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
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