首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用有效的方法-表单请求处理图像(Laravel 9)

如何使用有效的方法-表单请求处理图像(Laravel 9)
EN

Stack Overflow用户
提问于 2022-03-20 21:13:07
回答 1查看 253关注 0票数 0

我的表单有4字段 name, email, website and image

当只传递name, email, website字段时,下面的代码将数据完美地保存到我的DataBase。

代码语言:javascript
复制
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

代码语言:javascript
复制
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" ]

我写了另一段代码来解决这个问题,

代码语言:javascript
复制
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',
        ]);
    }

但是有任何方法可以用第一个代码块保存图像的正确位置吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-22 22:18:07

有什么方法可以用第一个代码块保存图像的正确位置吗?

不,因为第一个代码块只会在保存输入之前验证输入。文件上传需要更多的工作。医生们是一个很好的起点。

以下是我在评论中所描述的。

如果您需要对文件名进行一些控制:

代码语言:javascript
复制
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为您做更多的工作:

代码语言:javascript
复制
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',
    ]);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71550691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档