2017-08-10 3 views
0

Ich versuche, meine Anwendung auf "public/uploads/documentos/{the-id}" hochladen, kann aber nicht herausfinden, was mit meinem aktuellen Setup nicht stimmt. Wenn ich jetzt eine Datei mit dem Namen "myfile.pdf" hochlade, wird ein Ordner mit dem Namen "myfile.pdf" und darin eine * .tmp-Datei erstellt. In meiner Datenbank wird "{the-id} /myfile.pdf" als Datei-URL gespeichert, aber dies bringt mich zur Ordneransicht, wenn ich die Datei darin sehen möchte.Laravel Datei-Upload erstellt einen Ordner mit einer temporären Datei

Wie kann ich es so ändern, dass beim Hochladen eines Dokuments die Datei "myfile.pdf" direkt unter "public/uploads/documentos/{the-id}" erstellt wird, damit ich darauf zugreifen kann? {the-id} ist ein Ordner, der basierend auf der ID des Patienten erstellt wurde. Alle Dokumente, die zu ihnen gehören, werden in demselben Ordner gespeichert.


-Controller

public function store(Request $request) 
{ 
    $this->validate($request, [ 
     'tipo' => 'required|max:100', 
     'descripcion' => 'max:200', 
     'fecha_documento' => 'max:20', 
     'archivo' => 'required|mimes:doc,docx,pdf,jpg,png,jpeg', 
     'mascota_id' => 'required', 
     'mascota_num' => 'required', 
    ]); 

    $documento = new Documento; 
    $documento->mascota_num = $request->input('mascota_num'); 
    $documento->mascota_id = $request->input('mascota_id'); 
    $documento->tipo = ucfirst($request->input('tipo')); 
    $documento->descripcion = ucfirst($request->input('descripcion')); 
    $documento->fecha_documento = $request->input('fecha_documento'); 

    if($request->hasFile('archivo')) { 
     $archivo = $request->file('archivo'); 
     $archivo_folder = public_path('/uploads/documentos/') . $request->input('mascota_num');   
     $archivo_nombre = $archivo->getClientOriginalName(); 
     $archivo_url = $archivo_folder . '/' . $archivo_nombre; 

     if (file_exists($archivo_folder)) { 
      $archivo->move($archivo_folder . '/' . $archivo_nombre); 
     } else { 
      File::makeDirectory($archivo_folder, $mode = 0777, true, true); 
      $archivo->move($archivo_folder . '/' . $archivo_nombre); 
     } 

     $documento->archivo = $request->input('mascota_num') . '/' . $archivo_nombre; 
     $documento->save(); 

     return redirect()->route('mascotas.show', [$request->input('mascota_num')])->with('message', 'Documento agregado exitosamente.'); 
    } 
} 

Wie kann ich meine hochgeladenen Dateien mit diesem Code aussehen:

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 

} 

Was ich will

uploads/documentos/ 

-- 1 
    -- myfile.pdf /file 
-- 2 
    -- myfile.pdf /file 
    -- otherfile.pdf /file 

Im Idealfall würde Ich mag das halten Dateien privat, also habe ich versucht, sie auf t hochzuladen er Speicherordner mit diesem Code:

Storage::put('documentos/'.$request->input('mascota_num').'/', $archivo_nombre); 
$documento->archivo = Storage::url('documentos/'.$request->input('mascota_num').'/'.$archivo_nombre); 

aber {the-id} Ordner wurde nicht erstellt und die Dateien nicht gespeichert wurden, alles, was ich bekam, war:

storage/app/documentos/ 

-- 1 /file without extension 
-- 2 /file without extension 

ich abrechnen würde für der erste Teil funktioniert jetzt. Vielen Dank im Voraus für Ihre Hilfe.

Antwort

0

Nach viel Versuch und Irrtum konnte ich Dateien in den Speicherordner meiner Anwendung hochladen.

if($request->hasFile('archivo')) { 
    $archivo = $request->file('archivo'); 

    Storage::disk('documentos')->put($request->input('mascota_num') . '/' . $archivo->getClientOriginalName(), File::get($archivo)); 

    $documento->archivo = $request->input('mascota_num') . '/' . $archivo_nombre; 
    $documento->save(); 
} 

Dateien werden auf /storage/app/public/documentos/ unter dem richtigen Patienten-ID-Ordner und mit dem korrekten Dateinamen gespeichert.

Ich habe keine Möglichkeit gefunden, die Dateien von meinem Show Blade korrekt zu verknüpfen, Storage::url('documentos/'.$documento->archivo)) zeigt eine 404-Fehlerseite, obwohl der Dateipfad korrekt ist. Hoffentlich kann ich das als nächstes arbeiten.

+0

Ich habe vergessen, einen symbolischen Link von öffentlich/Speicher zu Speicher/app/public zu erstellen. Jetzt kann ich von einem Blade mit meinen hochgeladenen Dateien verknüpfen: 'Storage :: url ('documentos /'.$ documento-> archivo))'. –

Verwandte Themen