我正处于一个个人项目的中间,该项目将成为文件管理器,目前正在执行将文件移至自定义目录的过程,但是上载此“ dir”的部分到数据库不起作用,这是我的控制器的“存储”功能。
public function store(Request $request)
{
$request->validate([
'path' => 'required',
'id_class' => 'required'
]);
$file = $request->path;
$fileName = bin2hex(random_bytes(5)) . ".pdf";
$folder = "files/" . str_pad($request['id_user'], 6, "0", STR_PAD_LEFT)
. "/" . date("Y-m-d");
$path = $file->storeAs(
$folder,
$fileName
);
$request = $request->merge(['path' => $path]);
if (Presentation::create($request->all())) {
return redirect()->route('presentation.create')
->with('success', "Presentation successfully exported {$path}");
}
}
您可以看到我正在显示“ $ path”,收到的消息是
“演示文稿已成功导出文件/000001/2019-10-09/a1c3b14192.pdf”
但是在Xampp上的我的表中收到“ D:\ xampp \ tmp \ phpBDBA.tmp”。
只是出于可能缺乏信息的原因,这是我的表格:
答案 0 :(得分:2)
您可以通过merge
将输入合并到请求中,但是文件仍然存在于单独的源中。在这种情况下,您将为已生成的存储文件路径设置输入path
,但是文件中的path
var仍作为UploadedFile
对象存在。 all
方法以文件具有优先权的方式将文件合并到输入中。对于仅获取输入(不包括文件)的情况,可以调用input()
而不是all()
。
Presentation::create($request->input())
答案 1 :(得分:0)
您不能合并这样的请求。您可以找到打印请求dd($request);
$request = $request->merge(['path' => $path]);
您可以尝试这样:
$requestData = collect($request->only(['path', 'id_class']));
// or
// $requestData = collect($request->all());
$requestData = $requestData->merge(['path' => $path]);
Presentation::create($requestData);
希望这会有所帮助。