2017-08-10 213 views
0

我試圖讓我的應用程序上傳文件到「public/uploads/documentos/{the-id}」,但無法弄清楚我當前的設置有什麼問題。現在,如果我上傳一個名爲「myfile.pdf」的文件,它會創建一個名爲「myfile.pdf」的文件夾,並在其中創建一個* .tmp文件。在我的數據庫中,「{the-id} /myfile.pdf」被保存爲文件url,但是這會將我帶到文件夾視圖,當我想要的是在文件內部看到文件時。Laravel文件上傳創建臨時文件的文件夾

如何更改它,以便在上傳文檔時,直接在「public/uploads/documentos/{the-id}」下創建文件「myfile.pdf」,以便我可以像這樣訪問它? {the-id}是根據患者ID創建的文件夾,因此屬於它們的所有文檔都保存在同一個文件夾中。


控制器

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.'); 
    } 
} 

我上傳的文件怎麼看這個代碼:

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 

} 

我想

uploads/documentos/ 

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

理想的情況是什麼,我想保持私人文件,所以我試圖將它們上傳到t與此代碼,他存儲文件夾:

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

但{了-ID}中創建的文件夾和文件沒有保存,我得到的是:

storage/app/documentos/ 

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

我會滿足於使第一部分現在工作。在此先感謝您的幫助。

回答

0

經過多次試驗和錯誤,我設法將文件上傳到我的應用程序的存儲文件夾。

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(); 
} 

文件正在正確的病人ID文件夾,並用正確的文件名保存到/storage/app/public/documentos/

我還沒有找到正確鏈接到我的演示刀片中的文件的方法,即使文件路徑正確,Storage::url('documentos/'.$documento->archivo))也會顯示404錯誤頁面。希望我能接下來的工作。

+0

我忘了創建一個從public/storage到storage/app/public的符號鏈接。現在我可以使用:'Storage :: url('documentos /'.$ documento-> archivo)''從葉片鏈接到我上傳的文件。 –

相關問題