我的表单有4字段 name, email, website and image
当只传递name, email, website字段时,下面的代码将数据完美地保存到我的DataBase。
public function store(StoreCompanyRequest $request)
{
$validated = $request->validated(); //It will return only validated data
Company::create($validated);
return response()->json([
'success' => true,
'message' => 'Company Created Successfully',
]);
}但是如果用户传递一个image file.上面的代码保存了图像的临时路径。
这是输出:

输出: $validated
array:4 [ "name" => "infotech" "email" => "infotech@gmail.iop" "logo" => Illuminate\Http\UploadedFile {#310 -test: false -originalName: "greenscreenman.jpg" -mimeType: "image/jpeg" -error: 0 #hashName: null path: "C:\Users\dummy\AppData\Local\Temp" filename: "php30CD.tmp" basename: "php30CD.tmp" pathname: "C:\Users\dummy\AppData\Local\Temp\php30CD.tmp" extension: "tmp" realPath: "C:\Users\dummy\AppData\Local\Temp\php30CD.tmp" aTime: 2022-03-22 12:52:30 mTime: 2022-03-22 12:52:29 cTime: 2022-03-22 12:52:29 inode: 258750 size: 70458 perms: 0100666 owner: 0 group: 0 type: "file" writable: true readable: true executable: false file: true dir: false link: false linkTarget: "C:\Users\dummy\AppData\Local\Temp\php30CD.tmp" } "website" => "www.infotech.com" ]我写了另一段代码来解决这个问题,
public function store(StoreCompanyRequest $request)
{
$validated = $request->validated(); //It will return only validated data
// Company::create($validated);
$company = new Company;
$company->name = $validated['name'];
$company->email = $validated['email'];
$company->website = $validated['website'];
$logoName = time().'.'.$request->file('logo')->extension();
$logoPath = $request->file('logo')->storeAs('public/files', $logoName);
$company->logo = $logoName;
$company->save();
return response()->json([
'success' => true,
'message' => 'Company Created Successfully',
]);
}但是有任何方法可以用第一个代码块保存图像的正确位置吗?
发布于 2022-03-22 22:18:07
有什么方法可以用第一个代码块保存图像的正确位置吗?
不,因为第一个代码块只会在保存输入之前验证输入。文件上传需要更多的工作。医生们是一个很好的起点。
以下是我在评论中所描述的。
如果您需要对文件名进行一些控制:
public function store(StoreCompanyRequest $request)
{
$validated = $request->validated();
$path = $request->file('logo')->storeAs(
'public/files',
time() . '.' . $request->file('logo')->extension()
);
$validated['logo'] = basename($path);
Company::create($validated);
return response()->json([
'success' => true,
'message' => 'Company Created Successfully',
]);
}如果您不需要控制文件名,您可以让Laravel为您做更多的工作:
public function store(StoreCompanyRequest $request)
{
$validated = $request->validated();
$path = $request->file('logo')->store('public/files');
$validated['logo'] = basename($path);
Company::create($validated);
return response()->json([
'success' => true,
'message' => 'Company Created Successfully',
]);
}https://stackoverflow.com/questions/71550691
复制相似问题