Laravel文件上传创建带有临时文件

时间:2017-08-10 00:28:01

标签: laravel-5.4 laravel-filesystem

我试图让我的应用程序将文件上传到" public / uploads / documentos / {the-id}"但无法弄清楚我目前的设置有什么问题。现在,如果我上传一个名为" myfile.pdf"的文件,它会创建一个名为" myfile.pdf"的文件夹。并在其中包含* .tmp文件。在我的数据库中," {--id} /myfile.pdf"保存为文件URL,但这会将我带到文件夹视图,当我想要的是查看其中的文件。

如何更改它以便在上传文档时创建文件" myfile.pdf"直接在" public / uploads / documentos / {the-id}"这样我可以这样访问它? {-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

理想情况下,我希望将文件保密,因此我尝试使用以下代码将其上传到存储文件夹:

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

但是{the-id}文件夹没有创建,文件也没有保存,我得到的只是:

storage/app/documentos/

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

我现在决定让第一部分工作。在此先感谢您的帮助。

1 个答案:

答案 0 :(得分: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();
}

文件将保存到/storage/app/public/documentos/下正确的患者ID文件夹下,并且文件名正确无误。

我没有找到正确链接到我的展示刀片文件的方法,Storage::url('documentos/'.$documento->archivo))显示404错误页面,即使文件路径正确。希望我接下来可以开始工作。