Laravel.io
<?php

namespace App\Http\Controllers;

use App\File;
use App\Http\Requests\SaveFilePostRequest;
use Illuminate\Contracts\Hashing\Hasher;
use Illuminate\Support\Facades\Response;

class HomeController extends Controller
{
    protected $hash;

    public function __construct( Hasher $hash)
    {
        $this->hash = $hash;
    }

    public function index(){

        return view('home');
    }

    public function saveFile(SaveFilePostRequest $request){

        $uploadsDir = $_SERVER['DOCUMENT_ROOT'] . '/public/uploads/';

        if(!file_exists($uploadsDir . date('Y'))){
            mkdir($uploadsDir . date('Y'));
        }
        if(!file_exists($uploadsDir . date('Y') . '/' . date('m'))){
            mkdir($uploadsDir . date('Y') . '/' . date('m'));
        }

        $file = $request->file('file');
        $hashName =  $this->hash->make($file->getClientOriginalName());

        $file->move($uploadsDir . date('Y') . '/' . date('m') . '/', $hashName);
        
        $file = File::create([
            'name' => $file->getClientOriginalName(),
            'size' => $file->getClientSize(),
            'path' => $uploadsDir . date('Y') . '/' . date('m') . '/' .  $hashName]);

        return redirect('file/' . strval($file->id));



    }
    public function file($id){

        $file = File::find($id);

        return view('file', ['file' => $file]);
    }

    public function download($id){

        $file = File::find($id);
        return Response::download($file->path, $file->name);
    }

Please note that all pasted data is publicly available.