Laravel 文件上传创建了一个包含临时文件的文件夹
Laravel file upload creates folder with a temp file
我试图让我的应用程序将文件上传到“public/uploads/documentos/{the-id}”,但无法弄清楚我当前的设置有什么问题。现在,如果我上传一个名为“myfile.pdf”的文件,它会创建一个名为“myfile.pdf”的文件夹,并在其中创建一个 *.tmp 文件。在我的数据库中,“{the-id}/myfile.pdf”保存为文件 url 但这会将我带到文件夹视图,而我想要的是查看其中的文件。
如何更改它以便在上传文档时在“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
理想情况下,我想将文件保密,所以我尝试使用以下代码将它们上传到存储文件夹:
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
我愿意暂时让第一部分工作。预先感谢您的帮助。
经过反复试验,我成功地将文件上传到我的应用程序的存储文件夹中。
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 文件夹下。
我还没有找到一种方法来正确 link 我的节目 blade 中的文件,Storage::url('documentos/'.$documento->archivo))
显示 404 错误页面,即使文件路径是正确的。希望我接下来可以正常工作。
我试图让我的应用程序将文件上传到“public/uploads/documentos/{the-id}”,但无法弄清楚我当前的设置有什么问题。现在,如果我上传一个名为“myfile.pdf”的文件,它会创建一个名为“myfile.pdf”的文件夹,并在其中创建一个 *.tmp 文件。在我的数据库中,“{the-id}/myfile.pdf”保存为文件 url 但这会将我带到文件夹视图,而我想要的是查看其中的文件。
如何更改它以便在上传文档时在“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
理想情况下,我想将文件保密,所以我尝试使用以下代码将它们上传到存储文件夹:
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
我愿意暂时让第一部分工作。预先感谢您的帮助。
经过反复试验,我成功地将文件上传到我的应用程序的存储文件夹中。
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 文件夹下。
我还没有找到一种方法来正确 link 我的节目 blade 中的文件,Storage::url('documentos/'.$documento->archivo))
显示 404 错误页面,即使文件路径是正确的。希望我接下来可以正常工作。