1 - if you aren't able to create a symlink, its very likely if you ask your ISP they can do it for you.
2 - if they cant you could just upload to public/images instead of storage/public/images
3 - if you don't want to do that, and images are small:
from this stackoverflow:
If, for any reason, your can't create symbolic links (maybe you're on shared hosting, etc.) or you want to protect some files behind some access control logic, there is the alternative of having a special route that reads and serves the image. For example a simple closure route like this:
Route::get('storage/{filename}', function ($filename)
{
$path = storage_path('public/' . $filename);
if (!File::exists($path)) {
abort(404);
}
$file = File::get($path);
$type = File::mimeType($path);
$response = Response::make($file, 200);
$response->header("Content-Type", $type);
return $response;
});
The last option has a performance hit as you are serving your images through Laravel rather than directly from the server.
If you cant symlink, my preferred method would be option 2.