title: Laravel file upload creates folder with a temp file
body: <p>I'm trying to get my application to upload files to &quot;public/uploads/documentos/{the-id}&quot; but can't figure out what's wrong with my current setup. Right now, if I upload a file called &quot;myfile.pdf&quot;, it creates a folder named &quot;myfile.pdf&quot; and inside of it a *.tmp file. In my database, &quot;{the-id}/myfile.pdf&quot; is saved as the file url but this takes me to the folder view, when what I want is to see the file inside of it.</p>
  <p>How can I change it so that when a document is upload, it creates the file &quot;myfile.pdf&quot; directly under &quot;public/uploads/documentos/{the-id}&quot; so that I can access it like that? {the-id} is a folder created based on the patient's id, so all documents belonging to them are saved to the same folder.</p>
  <hr />
  <p>Controller</p>
  <pre class="lang-php prettyprint-override"><code>    public function store(Request $request)
      {
          $this-&gt;validate($request, [
              'tipo' =&gt; 'required|max:100',
              'descripcion' =&gt; 'max:200',
              'fecha_documento' =&gt; 'max:20',
              'archivo' =&gt; 'required|mimes:doc,docx,pdf,jpg,png,jpeg',
              'mascota_id' =&gt; 'required',
              'mascota_num' =&gt; 'required',
          ]);
                  
          $documento = new Documento;
          $documento-&gt;mascota_num = $request-&gt;input('mascota_num');
          $documento-&gt;mascota_id = $request-&gt;input('mascota_id');
          $documento-&gt;tipo = ucfirst($request-&gt;input('tipo'));
          $documento-&gt;descripcion = ucfirst($request-&gt;input('descripcion'));
          $documento-&gt;fecha_documento = $request-&gt;input('fecha_documento');
          
          if($request-&gt;hasFile('archivo')) {
              $archivo = $request-&gt;file('archivo');
              $archivo_folder = public_path('/uploads/documentos/') . $request-&gt;input('mascota_num');         
              $archivo_nombre = $archivo-&gt;getClientOriginalName();
              $archivo_url = $archivo_folder . '/' . $archivo_nombre;
              
              if (file_exists($archivo_folder)) {
                  $archivo-&gt;move($archivo_folder . '/' . $archivo_nombre);
              } else {
                  File::makeDirectory($archivo_folder, $mode = 0777, true, true);
                  $archivo-&gt;move($archivo_folder . '/' . $archivo_nombre);
              }
              
              $documento-&gt;archivo = $request-&gt;input('mascota_num') . '/' . $archivo_nombre;
              $documento-&gt;save();
          
              return redirect()-&gt;route('mascotas.show', [$request-&gt;input('mascota_num')])-&gt;with('message', 'Documento agregado exitosamente.');
          }
      }
  </code></pre>
  <p>How my uploaded files look with this code:</p>
  <pre><code>uploads/documentos/
  
  -- 1
    -- file.pdf /folder
      -- random_name.tmp /file
  -- 2
    -- file.pdf /folder
      -- random_name.tmp /file
    -- otherfile.pdf /folder 
      -- random_name.tmp /file
  
  }
  </code></pre>
  <p>What I want</p>
  <pre><code>uploads/documentos/
  
  -- 1
    -- myfile.pdf /file
  -- 2
    -- myfile.pdf /file
    -- otherfile.pdf /file
  </code></pre>
  <p>Ideally, I'd like to keep the files private, so I tried to upload them to the storage folder with this code:</p>
  <pre><code>Storage::put('documentos/'.$request-&gt;input('mascota_num').'/', $archivo_nombre);
  $documento-&gt;archivo = Storage::url('documentos/'.$request-&gt;input('mascota_num').'/'.$archivo_nombre);
  </code></pre>
  <p>but {the-id} folder wasn't created and the files weren't saved, all I got was:</p>
  <pre><code>storage/app/documentos/
  
  -- 1 /file without extension
  -- 2 /file without extension
  </code></pre>
  <p>I'd settle for making the first part work for now. Thanks in advance for your help.</p>