我已经把我的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不能处理上传可以与我分享他们的知识。🙂
2条答案
按热度按时间mnemlml81#
溶液
1.转到
vendor/livewire/livewire/src/Controllers/FileUploadHandler.php
并注解此行abort_unless(request()->hasValidSignature(), 401);
1.转到
vendor/livewire/livewire/src/TemporaryUploadedFile.php
,将此$tmpfile = tmpfile();
替换为以下内容: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的临时文件。r7s23pms2#
@human-developer帮助完成了第1步,但在我的例子中,我必须使用775而不是Ubuntu上的755,并跳过了第2步和第3步。
另外,不要使用777