Laravel 如何检查文件是否成功上传?

我想知道我是否使用 ValidationController 来验证文件上传并在我的 UploadController 中包含它:


$file = $request->validated();

在此之前:


if ($request->hasFile('file') {

  $file = $request->file('file');

  if ($file->isValid()) {

    [...]

  }

}

甚至有必要做$request->hasFile('file')-block吗?


在 ValidationController 中,我已经设置了文件是必需的并且必须是 pdf 的验证规则,因此hasFile('file')可能是多余的。如果文件没有被上传,那么我会被验证器重定向。


我知道该$file->isValid()部分会检查文件是否已成功上传,因此即使在验证文件后也可能需要这样做。


繁星点点滴滴
浏览 387回答 2
2回答

冉冉说

甚至有必要做$request->hasFile('file')-block吗?主要的问题将是这个逻辑是否在场景中执行$request也不会有一个名为文件file。如果没有hasFile调用,缺少文件的请求file将在 line 上抛出错误(“Call to a member function isValid() on null”)$file->isValid(),就像$filenull 一样。

慕尼黑8549860

首先,您必须php artisan storage:link在 Laravel 文件夹中运行以在 Laravel 应用程序中设置存储链接。验证器将帮助您了解文件是否已上传。并且 hasFile 函数检查文件是否已上传,因此通过我们可以检查文件是否成功上传的方法,您可以为用户方便的 webapp 发出警报。    public function store(Request $request){    $this->validate($request, [        'file' => 'image|nullable|max:1999'    ]);    // Handle File Upload    if($request->hasFile('file')){        // Get filename with the extension        $filenameWithExt = $request->file('file')->getClientOriginalName();        // Get just filename        $filename = pathinfo($filenameWithExt, PATHINFO_FILENAME);        // Get just ext        $extension = $request->file('file')->getClientOriginalExtension();        // Filename to store        $fileNameToStore= $filename.'_'.time().'.'.$extension;        // Upload Image        $path = $request->file('file')->storeAs('public/file', $fileNameToStore);       return redirect()->back() ->with('alert', 'Updated!');    } else {        $fileNameToStore = 'noimage.jpg';    }}
打开App,查看更多内容
随时随地看视频慕课网APP