So I have a table called 'images' and inside it I have fields in database like 'image1''image2' etc.
Now, the user is uploading each image individually so in a form there are 8 fields for uploading 8 different images, however how do I save this server side? I know how to upload 1 image but how can I do it for multiple images?
Here's my code so far and I am getting these errors:
Uncaught TypeError: Cannot read property 'gallery' of undefined
and
POST http://localhost:8000/gallery 404 (Not Found)
Controller:
public function gallery(Request $request) {
if($request->hasFile('gallery'))
{
$image = Input::file('gallery');
$files = count($files);
$uploadcount = 0;
foreach($files as $file) {
$filename = time() . '.' . $image->getClientOriginalExtension();
$path = public_path('gallery/' . $filename);
$image_path = ('gallery/' . $filename);
Image::make($image->getRealPath())->fit(60, 51)->save($path);
$uploadcount++;
$file = $request->file('gallery');
$session = session()->get('key');
$gallery = new Image();
$gallery->image1 = $image_path;
$gallery->business_id = $session;
$gallery->save();
return ['url' => url('gallery/' . $filename)];
}
}
AJAX:
function submitGallery() {
var fd = new FormData($(".upload_gallery")[0]);
fd.append('img', $('.img'));
$.ajax({
url: '/gallery',
data: fd,
dataType: 'json',
async: false,
type: 'post',
processData: false,
contentType: false,
success: function(data) {
$(".images").attr("src", data.url);
$('.messages').append('<div class="alert alert-success">Image Uploaded!<div>');
$(".alert-success").fadeOut(5000);
},
error: function(data) {
var errors = data.responseJSON; //this will get the errors response data.
//show them somewhere in the markup
//e.g
var errorsHtml = '<div class="alert alert-danger">';
errorsHtml += errors.gallery[0]; //showing only the first error.
errorsHtml += '</div>';
$('.messages').append('<div class="alert alert-danger">File type not supported! Use files with image extension only!<div>'); //appending to a <div id="form-errors">
$(".alert-danger").fadeOut(5000);
}
});
}
Blade:
<div id="gallery" class="sortable">
<form class="upload_gallery" action="" enctype="multipart/form-data" role="form" method="POST">
<input type="hidden" name="_token" value="">
<div id="image1" class="image-gallery">
<img class="images" src="#" />
<input style="width: 100%;height: 100%; opacity: 0;" name="gallery" id="gallery" class="img" data-input="false" type="file" data-size="sm" data-badge="false" onchange="submitGallery();" />
</div>
<div id="image2" class="image-gallery">
<img class="images" src="#" />
<input style="width: 100%;height: 100%; opacity: 0;" name="gallery" id="gallery" class="img" data-input="false" type="file" data-size="sm" data-badge="false" onchange="submitGallery();" />
</div>
<div id="image3" class="image-gallery">
<img class="images" src="#" />
<input style="width: 100%;height: 100%; opacity: 0;" name="gallery" id="gallery" class="img" data-input="false" type="file" data-size="sm" data-badge="false" onchange="submitGallery();" />
</div>
<div id="image4" class="image-gallery">
<img class="images" src="#" />
<input style="width: 100%;height: 100%; opacity: 0;" name="gallery" id="gallery" class="img" data-input="false" type="file" data-size="sm" data-badge="false" onchange="submitGallery();" />
</div>
<div id="image5" class="image-gallery">
<img class="images" src="#" />
<input style="width: 100%;height: 100%; opacity: 0;" name="gallery" id="gallery" class="img" data-input="false" type="file" data-size="sm" data-badge="false" onchange="submitGallery();" />
</div>
<div id="image6" class="image-gallery">
<img class="images" src="#" />
<input style="width: 100%;height: 100%; opacity: 0;" name="gallery" id="gallery" class="img" data-input="false" type="file" data-size="sm" data-badge="false" onchange="submitGallery();" />
</div>
<div id="image7" class="image-gallery">
<img class="images" src="#" />
<input style="width: 100%;height: 100%; opacity: 0;" name="gallery" id="gallery" class="img" data-input="false" type="file" data-size="sm" data-badge="false" onchange="submitGallery();" />
</div>
<div id="image8" class="image-gallery">
<img class="images" src="#" />
<input style="width: 100%;height: 100%; opacity: 0;" name="gallery" id="gallery" class="img" data-input="false" type="file" data-size="sm" data-badge="false" onchange="submitGallery();" />
</div>
</form>
</div>
Route:
Route::post('gallery', 'BusinessController@gallery');
Of course if you know of a better approach to do this than mine, please tell me I am open to suggestions
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire