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
条件。
我没有包含它们,但写它是必需的,不希望有另一个代码片段。不过谢谢你的回答。我只是不确定这个块在验证后是否是多余的..
如果您的验证正确地强制文件存在 - 您的验证规则应该包含 两个 required
和 file
规则 - 那么它是多余的。以上是关于Laravel如何检查文件是不是成功上传?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.3,检查上传的文件是不是大于upload_max_filesize(可选上传)