php 生产服务器上的Livewire图像上传失败

aurhwmvo  于 2023-02-18  发布在  PHP
关注(0)|答案(2)|浏览(165)

我已经把我的laravel项目部署到了vps服务器(ubuntu)上,除了上传图片,其他的都可以用。
图片上传本身在我的本地环境中运行良好
当我尝试上传图像时,Livewire抛出验证错误,显示The icon failed to upload.
这是因为Livewire不能创建livewire-tmp文件夹。我自己创建了那个文件夹,并给了它755权限,但它仍然不能工作。我也发布了Livewire配置文件,并改变了一些配置,但仍然一样。
我不知道为什么Livewire不能创建livewire-temp文件夹并在其中存储临时文件,可能是与nginx服务器配置有关,所以我分享我的ngnix配置:

server {
    listen 80 default_server;
    #listen [::]:80 default_server;

    root /var/www/html/west-hospital-admin/public;
    #root /home/west/west-hospital-admin/public;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html index.php;
    server_name _;

    location / {
        try_files $uri $uri/ /index.php$query_string;
    }
    # pass PHP scripts to FastCGI server

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
    }
}

我把我的项目的文件夹和文件权限,如果在情况下是必要的。这可能是一个权限问题。

storage/app/public folder

注意,Livewire本身并没有创建livewire-tmp文件夹,我创建了这个文件夹并给了它755权限。

public文件夹,带有指向storage/app/public文件夹的符号链接

我会非常感激,如果有人谁知道为什么Livewire不能处理上传可以与我分享他们的知识。🙂

mnemlml8

mnemlml81#

溶液
1.转到vendor/livewire/livewire/src/Controllers/FileUploadHandler.php并注解此行abort_unless(request()->hasValidSignature(), 401);
1.转到vendor/livewire/livewire/src/TemporaryUploadedFile.php,将此$tmpfile = tmpfile();替换为以下内容:

$tmpfname = tempnam(sys_get_temp_dir(), '');
 $tmpFile = fopen($tmpfname, 'w');

1.转到应用程序的public文件夹并创建livewire文件夹。(mkdir livewire)之后,转到该目录,并从那里创建一个符号链接,从public/livewire/preview-file指向应用程序的storage/app/public/livewire-tmp文件夹:
ln -s preview-file ../../storage/app/public/livewire-tmp
记住,你需要给予文件夹755权限,这是在storage/app/public文件夹.
解释
1.我们需要注解那一行,因为它检查你是否有ssl certificate,如果没有,它将中止请求,如果你有ssl证书,你可以跳过这一步。
1.在此步骤中,我们创建temporary file并给予写访问权限。
1.最后一步是创建一个symbolic link,我们需要创建这个symbolic link,因为在上传文件时,Livewire会创建一个带有该URL的临时文件。

r7s23pms

r7s23pms2#

@human-developer帮助完成了第1步,但在我的例子中,我必须使用775而不是Ubuntu上的755,并跳过了第2步和第3步。

sudo chmod -R 775 public/assets/imgs
sudo chown -R $USER:www-data public/assets/imgs

另外,不要使用777

相关问题