【问题标题】:Laravel 5.4 fopen(): Filename cannot be emptyLaravel 5.4 fopen():文件名不能为空
【发布时间】:2021-07-20 16:46:45
【问题描述】:

我想在 laravel 5.4 中上传图片 代码如下:

if ($request->hasFile('image') && $request->image->isValid()) {
        $image = $request->image;

        $image_name = bcrypt($image->getClientOriginalName());

        Storage::disk('public')->putFileAs('images', $image, $image_name . '.' . $image->getClientOriginalExtension());

        $article->image($image_name);
    }

在 FilesystemAdapter.php(第 146 行)中

我检查了 FileSystemAdapter.php,发现问题出在这一行:

$stream = fopen($file->getRealPath(), 'r+');

当我 var dump $file 变量时,它返回正确的信息,但是当我 var_dump($file->getRealPath(); 它显示 bool(false) 并且我无法上传图像

【问题讨论】:

  • 尝试将$image = $request->image;改为$image = $request->file('image');
  • @Laerte 结果是一样的
  • 它适用于我。 image 方法有什么作用?
  • 它对我来说也很好用。你有什么错误吗?
  • 这是您第一次处理文件上传吗?看看这个:stackoverflow.com/q/45548530/6294600

标签: php laravel laravel-5


【解决方案1】:

我们在使用 Windows® Server 的 Internet 信息服务 (IIS) 时遇到了这个问题。唯一需要的是 - C:\Windows\temp 的权限,因为它在 php7 的 php.ini 中设置为 upload_tmp_dir

【讨论】:

  • 您的回答帮助我找出了我的问题,谢谢
  • 你在托管我的 laravel 应用程序的 Windows 2012 R2 中第二次救了我的命
  • @YevgeniyAfanasyev,您是如何更改权限的?
  • IIS_IUSRS 用户添加到窗口的临时文件夹。谢谢! [+1]
【解决方案2】:

我在 Windows 10 上使用 Laragon 4.0.12 的案例。

问题是我的 php.ini 中的 upload_tmp_dir=... 没有设置所需的权限。

如果此设置被注释,则该值应该是默认的 windows 临时目录(C:\Windows\Temp 你可以检查你的权限)。

解决方案 - 我将其更改为:

upload_tmp_dir = "C:\Users\{my_user}\AppData\Local\Temp" 

为了避免弄乱更改权限。

修改后重启服务器生效。

需要考虑的 php.ini 中的其他设置:

upload_max_filesize = 
max_file_uploads = 

还需要启用以下php扩展:exif、gd2

【讨论】:

  • 只需在文件资源管理器上打开 C:\Windows\Temp 并接受权限提示就可以了。
【解决方案3】:

我的情况是:

那里不存在目标文件夹。我创造了它。所以错误消失了。

laravel 管理驱动在这里定义:

Config/admin.php

您可以在public 文件夹中定义它,例如:public 中的upload 文件夹。

我的目标文件夹(images)应该在/uploads/而不是public中创建

所以我在upload 中创建images 并且错误消失了

【讨论】:

  • @NicoHaase 昨晚我累了。所以我再次编辑这个答案
猜你喜欢
  • 1970-01-01
  • 2018-07-30
  • 2017-10-02
  • 2021-09-08
  • 2012-05-24
  • 1970-01-01
  • 2018-02-04
  • 1970-01-01
相关资源
最近更新 更多