2017-08-10 439 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)''从叶片链接到我上传的文件。 –

相关问题