Laravel文件不存在 - 文件上传

11

我正在使用一个表单来上传视频文件。但是出现了以下错误:

Symfony \ Component \ HttpFoundation \ File \ Exception \ FileNotFoundException
The file "" does not exist
在我的控制器中,我设置了一个验证规则来要求文件,像这样:
$validator = Validator::make(Input::all(),
  array(
    'file'  => 'required'
  )
);

但是由于上述规则,我无法正确地调试发生了什么事情,因此最终我将其删除,导致生成了上述错误。


如果您解决了问题,请回答自己的问题,这样它就不会再显示为“未回答”,并且可以作为其他人未来参考的资料。 - user2629998
4个回答

33

在php.ini文件中,更改以下内容:

upload_max_filesize = 20M
post_max_size = 20M

这样应该能让它工作。


最好留下一条评论,说明这个答案是从 OP(原帖作者)那里得到的,而不是将这个注释放在帖子本身中(因为我们试图让帖子保持简洁)。大多数人可能会建议将帖子设为社区 Wiki。 - Bernhard Barker
这是最好的答案,因为我卡住了,找不到实际原因,而这确实解决了我的问题。 - Rizwan Abbas

2
可能问题是已超过了“upload_max_filesize”限制(请检查您的php.ini文件),然而首先检查文件是否有效是一个好的做法。最初的回答:可能是上传文件大小超过了限制,请检查您的php.ini文件中的“upload_max_filesize”设置。但是,首先检查文件是否有效是个好习惯。
if (!$file->isValid()) {
    throw new \Exception('Error on upload file: '.$file->getErrorMessage());
}
//...

1
在2020年使用Laravel 5.8时,我发现了这个问题,你的答案给了我线索,但是当我尝试使用isValid方法时仍然出现错误。我发现这是检查文件是否过大的最佳方法:
    $file_result = new \stdClass();
    if ($request->file('file_to_upload')->getSize() === false) {
        $max_upload = min(ini_get('post_max_size'), ini_get('upload_max_filesize'));
       //From: https://gist.github.com/svizion/2343619
        $max_upload = str_replace('M', '', $max_upload);
        $max_upload = $max_upload * 1024;
        $file_result->error = "The file you are trying to upload is too large. The maximum size is " . $max_upload;
        //return whatever json_encoded data your client-side app expects.
    }

看起来如果文件大小超过最大大小,getSize方法会成功返回false。根据我的经验,isValid会抛出一个晦涩的错误。上传文件大小参数存在是为了保护服务器,所以我想要一种可靠的方法来捕获当用户尝试上传一个大文件并且我的客户端验证未正确设置时。


0

为了清除答案, 您上传的文件大小超过了php.ini中的配置,因此当您尝试访问uploadFile对象的任何属性时,您将看到异常,因为文件不存在


1
这个问题在2014年得到了解决。接受的答案说明了需要在php.ini文件中进行的更改。 - cch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接