// Use a file that's been uploaded
Input::file('filename');
// Determine if a file was uploaded
Input::hasFile('filename');
// Access file properties
Input::file('name')->getRealPath();
Input::file('name')->getClientOriginalName();
Input::file('name')->getClientOriginalExtension();
Input::file('name')->getSize();
Input::file('name')->getMimeType();
// Move an uploaded file
Input::file('name')->move($destinationPath);
// Move an uploaded file
Input::file('name')->move($destinationPath, $fileName);
Look in the Laravel API and you will find that Input::file returns a "Symfony\Component\HttpFoundation\File\UploadedFile" object which doensn't have a function named "getClientOriginalExtension", try "getExtension".
You can use json_decode($product->images) to get an array of your images. I don't know how you are displaying your images, but a presenter could turn the image names in the array into urls. You can then call them like $product->present()->images and use foreach in the view to display them all.
Also, it would be a better idea to use {{ URL::to('/uploads/profile/'. $image) }} than writing it plainly since this'll add your site's url to the link as well.