【问题标题】: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 检查文件是否已成功上传,因此即使在验证文件之后也可能需要这样做。

【问题讨论】:

标签: php laravel validation file-upload


【解决方案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 规则 - 那么它是多余的。
猜你喜欢
  • 2019-11-14
  • 1970-01-01
  • 2019-05-23
  • 1970-01-01
  • 1970-01-01
  • 2015-12-29
  • 2019-03-13
  • 2017-11-07
相关资源
最近更新 更多