Laravel 5.4 fopen(): 文件名不能为空

12

我想在 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行:
$stream = fopen($file->getRealPath(), 'r+');
当我使用var_dump函数打印$file变量时,它会返回正确的信息,但当我使用var_dump($file->getRealPath();时,它会显示bool(false),这导致我无法上传图片。

尝试将 $image = $request->image; 更改为 $image = $request->file('image'); - Laerte
@Laerte 结果是一样的。 - Angel Miladinov
它在我这里运行良好。image方法是做什么的? - louisfischer
对我来说它完全正常运行。你有收到任何错误吗? - Sazzadur Rahman
这是您第一次处理文件上传吗?看看这个:https://stackoverflow.com/q/45548530/6294600 - SiNONiMiTY
3个回答

24

我们在Windows® Server的Internet Information Services (IIS)上遇到了这个问题。唯一需要的是给C:\Windows\temp文件夹授权,因为它被设置为php7的php.ini中的upload_tmp_dir


2
你的答案帮助我找到了问题所在,谢谢。 - saber tabatabaee yazdi
1
你在托管我的Laravel应用程序的Windows 2012 R2上第二次拯救了我的生命。 - saber tabatabaee yazdi
@YevgeniyAfanasyev,你是如何更改权限的? - NicuVlad
1
IIS_IUSRS 用户添加到 Windows 的临时文件夹中。谢谢! [+1] - kapitan

10

我在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”并接受权限提示,问题就解决了。 - dr_ermio

0

我的情况是:

目标文件夹不存在,我创建了它。因此错误已经消失。

laravel管理驱动程序在这里定义:

Config/admin.php

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

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

所以我在upload中创建了images,错误就消失了


@NicoHaase 昨晚我很累。所以我再次编辑了这个答案。 - saber tabatabaee yazdi

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