当我将 Laravel / Livewire 网站部署到生产环境时,我遇到了在 Laravel / Livewire 网站上显示图像的问题。奇怪的是,图像通过符号链接正确保存在存储文件夹中,但当我尝试将它们加载到页面上时,它们无法正确显示。此问题仅出现在生产环境中,并且仅针对保存在存储文件夹中的图像,而在开发环境中一切正常。
这是我用来保存和显示图像的代码:
上传到存储的方法:
public function uploadImage(){
$this->validate([
'image' => 'image|mimes:jpeg,jpg,png,gif|max:2048',
// valida che il file sia un'immagine e abbia una dimensione massima di 2MB
]);
// Verifica se la directory di destinazione esiste, altrimenti creala
$societaId = Auth::user()->societa_id;
$storageDirectory = 'public/immagini_associato/associazione_' . $societaId;
if (!Storage::exists($storageDirectory)) {
Storage::makeDirectory($storageDirectory, 0755, true); // crea la directory
}
// Genera un nome univoco per l'immagine
$imageName = 'immagine_associato_' . $this->associato->id . '.' . $this->image->getClientOriginalExtension();
// Salva l'immagine nello storage
$this->image->storeAs($storageDirectory, $imageName);
$this->alert('success', 'Immagine caricata correttamente');
$this->emit('refreshComponent');
}
这是在安装上显示图像的方法:
public function mount()
{
// Verifica se esiste un'immagine per l'associato
$societaId = Auth::user()->societa_id;
$imageName = 'immagine_associato_' . $this->associato->imagePath. ;
$directory = 'immagini_associato/associazione_' . $societaId;
// Verifica se l'immagine esiste nello storage pubblico
if (Storage::disk('public')->exists($directory . '/' . $imageName)) {
$this->imagePath = asset('storage/' . $directory . '/' . $imageName);
} else {
// Utilizza un'immagine di default se l'immagine non esiste
$this->imagePath = asset('assets/img/avatars/avatarUnknown.jpg');
}
}
我不得不说我可以看到这张图片:
$this->imagePath = asset('assets/img/avatars/avatarUnknown.jpg');
但这不起作用(仅在生产中)
$this->imagePath = asset('storage/' . $directory . '/' . $imageName);
在我的开发环境中,一切都按预期运行,但是当我部署到生产环境并尝试访问浏览器中的图像时,出现 404 错误。
什么可能导致此问题以及如何解决?
预先感谢您的任何帮助或建议!
这应该提供我的问题的全面概述,包括使用符号链接来访问存储目录。
我添加了请求方法然后$this。
public function uploadImage(Request $request)
{
$request->validate([
'image' => 'image|mimes:jpeg,jpg,png,gif|max:2048',
]);
$societaId = Auth::user()->societa_id;
$storageDirectory = 'public/immagini_associato/associazione_' . $societaId;
if (!Storage::exists($storageDirectory)) {
Storage::makeDirectory($storageDirectory, 0755, true);
}
// Generate a unique name for the image
$imageName = 'immagine_associato_' . $this->associato->id . '.' . $request->image->getClientOriginalExtension();
$request->image->storeAs($storageDirectory, $imageName);
$this->alert('success', 'Immagine caricata correttamente');
$this->emit('refreshComponent');
}
在 Mount 中,$this->associato->imagePath
之后有一个额外的点 (.)public function mount()
{
$societaId = Auth::user()->societa_id;
$imageName = 'immagine_associato_' . $this->associato->id; // Remove the concatenation with $this->associato->imagePath
$directory = 'immagini_associato/associazione_' . $societaId;
if (Storage::disk('public')->exists($directory . '/' . $imageName)) {
$this->imagePath = asset('storage/' . $directory . '/' . $imageName);
} else {
$this->imagePath = asset('assets/img/avatars/avatarUnknown.jpg');
}
}
并清除缓存。