当图像已上传到文件夹中时,如何解决 laravel 中的“文件不存在或不可读”

Posted

技术标签:

【中文标题】当图像已上传到文件夹中时,如何解决 laravel 中的“文件不存在或不可读”【英文标题】:how to solve "file does not exist or is not readable" in laravel while the image have been uploaded in folder 【发布时间】:2020-02-13 06:44:42 【问题描述】:

我在尝试上传文件时遇到此错误,但文件正在上传,因为我可以在目录中找到它!但它没有继续,而是抛出了这个错误,我一直在使用这个脚本,直到laravel 6.0,我不明白为什么! 谢谢

$image_name=Str::random(12);
$ext=strtolower($image->getClientOriginalExtension());
$image_full_name=$image_name.'.'.$ext;
$upload_path='upload/article/';
$image_url=$upload_path.$image_full_name;
// $success=1;
$success=$image->move($upload_path,$image_full_name);
// return $success;
if($success)

    $data['post_photo']=$image_url;
    DB::table('post')->insert($data);
    Session::put('message','article posted Successfully');
    return Redirect::to('create-post');

这是我的 html 代码

<div class="custom-file">
   <input type="file" class="custom-file-input form-control  " id="customFileLang" name="photo" >
   <label class="custom-file-label" for="customFileLang">Choose Picture </label>
</div>
@error("photo")
  <p style="color:red;" class="mx-4"> $message </p>
@enderror

                  ```

【问题讨论】:

运行php的网络服务器是否有权将数据存储在/tmp-文件夹中? 是的,因为在另一个项目上我有它的工作原理! @feeela 也给你的html代码 @TanvirAhmed,我添加了它们。 【参考方案1】:

Сheck 调用 $validator-&gt;fails() 发生了一次。

在我的情况下,在我的控制器操作中第一次调用$validator-&gt;fails(),在检查删除文件之后。第二次调用找不到这个文件。

【讨论】:

【参考方案2】:

如果文件上传成功,那么问题出在其他地方,可惜这个错误表示的太混乱了,并不是真正的错误。 实际错误发生在您将数据插入数据库的地方,在您的情况下是这一行:

DB::table('post')->insert($data); // the case in this question

在我的例子中是我试图将博客插入数据库的一行:

Blog::create($data); // my case

为了找出真正的错误,您必须使用 try 和 catch。

try 
  DB::table('post')->insert($data); // for my case : Blog::create($data);
 catch (\Exception $e) 
  dd($e);

当你转储并死掉$e,你会看到实际的错误:

对我来说,在我的情况下,实际错误是:“Field 'author_type' doesn't have a default value”,但由于某些未知原因 laravel 6.0 显示当您在表单中上传数据时出现“文件不存在或不可读错误”。

【讨论】:

【参考方案3】:

如果其他人遇到此错误,请尝试检查您的 php.ini...确保您的 upload_max_filesize 与您的 post_max_size 一样大。我有 1000M 的 post_max_size,但只有 100M 的 upload_max_size。上传会搅动很长时间,然后抛出上面的错误(除了它有“”作为文件名,并且没有上传任何文件)。

【讨论】:

以上是关于当图像已上传到文件夹中时,如何解决 laravel 中的“文件不存在或不可读”的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel 上上传文件并将其存储在目录中

如何使用 laravel jrm2k6/cloudder 将图像上传到 cloudiary 上的特定文件夹

Laravel 8 UniSharp File Manager 3 - 图片已上传但未显示

如何在通过php存储在文件夹中时更改图像名称

Laravel UniSharp 文件管理器已上传,但未显示图像

保存上传的文件