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

Posted

技术标签:

【中文标题】Laravel如何检查文件是不是成功上传?【英文标题】:Laravel how to check if file successful uploaded?Laravel如何检查文件是否成功上传? 【发布时间】:2019-12-07 20:10:05 【问题描述】:

我想知道我是否使用 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()part 检查文件是否已成功上传,因此即使在验证文件之后也可能需要这样做。

【问题讨论】:

请查收***.com/questions/53909833/… @DilipHirapara 这没有回答我的问题,但谢谢 【参考方案1】:

首先你必须在你的 Laravel 文件夹中运行 php artisan storage:link 来在你的 Laravel 应用程序中设置一个存储链接。 验证器将帮助您了解文件是否已上传。

hasFile 函数会检查文件是否已上传,因此通过该方法我们可以检查文件是否已成功上传,并且您可以对 User convienient 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';
    


【讨论】:

这一切我都知道,我在问是否有必要在我已经验证后执行 'hasFile()' 和 'isValid()' .. 我不知道你想做什么 如果您通过其他方式验证了它,只需执行以下 $request->file->store('files');其中 file 是您的文件夹名称 我不知道,不是我 后来我在评论中指定了.. 甚至我不知道谁对我投了反对票【参考方案2】:

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

主要问题是这个逻辑是否在$request 没有 有一个名为file 的文件的情况下执行。

如果没有hasFile 调用,在file 中缺少文件的请求将在$file->isValid() 行上引发错误(“调用成员函数isValid() on null”),因为$file 将为空。

【讨论】:

但是如果没有上传文件,我将通过 '$file = $request->validated()' 行重定向到表单,因为该字段的验证规则是必需的,所以这个块不会再被执行了,这就是我想要问的 @ofmiceandmoon 您没有在问题中包含您的验证规则,因此我在解释事情时要谨慎。如果您已经测试了该验证并且对它感到满意,我会说您可以放弃 hasFile 条件。 我没有包含它们,但写它是必需的,不希望有另一个代码片段。不过谢谢你的回答。我只是不确定这个块在验证后是否是多余的.. 如果您的验证正确地强制文件存在 - 您的验证规则应该包含 两个 requiredfile 规则 - 那么它是多余的。

以上是关于Laravel如何检查文件是不是成功上传?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 5.3,检查上传的文件是不是大于upload_max_filesize(可选上传)

Laravel 5 教程 - 文件上传

如何使用 Laravel + React 检查上传文件的类型?

Laravel 路由问题:自动重定向到根文件夹

在 Laravel 5 上检查邮件是不是发送成功

安装 Laravel 时收到错误,如何知道是不是需要重新安装? [复制]