Егор Виленский
Профи
(622)
3 часа назад
Проблема возникает из-за того, что в базе данных сохраняется только имя файла, а не полный путь. Вот как это исправить:
---
### **1. Исправьте код в `ProductController`:**
Добавьте путь к папке при сохранении имени файла в БД:
```php
$ThumbnailName = '';
if ($image = $request->file('Thumbnail')) {
$ThumbnailName = time() . '-' . $image->getClientOriginalName();
$image->move('images/uploads', $ThumbnailName);
// Сохраните полный путь
$ThumbnailName = 'images/uploads/' . $ThumbnailName; // Добавьте эту строку
}
$product->Thumbnail = $ThumbnailName;
$product->save();
```
---
### **2. Проверьте путь к папке:**
- Убедитесь, что папка `public/images/uploads` существует и доступна для записи.
- Если используется Laravel, путь должен быть `public/storage/images/uploads`, и нужно создать симлинк:
```bash
php artisan storage:link
```
---
### **3. Исправьте вывод изображения в Blade:**
Используйте функцию `asset()`, чтобы получить корректный URL:
```php
<img src="{{ asset($product->Thumbnail) }}" alt="Thumbnail">
```
---
### **4. Проверьте права доступа:**
Выполните в терминале:
```bash
chmod -R 755 public/images/uploads
```
---
### **5. Дополнительные проверки:**
- Убедитесь, что в таблице `products` поле `Thumbnail` имеет тип `VARCHAR` с достаточной длиной.
- Если ошибка сохраняется, добавьте проверку на успешное сохранение файла:
```php
if ($image->move(...)) {
// Успешно
} else {
dd('Ошибка загрузки файла');
}
```
**Итог:** После этих изменений путь к изображению будет сохраняться в БД, и картинка отобразится корректно.
в productcontroller
$ThumbnailName = '';
if ($image = $request->file('Thumbnail')) {
$ThumbnailName = time() . '-' . $image->getClientOriginalName();
$image->move('images/uploads', $ThumbnailName);
}
<div class="col-md-3">
<label for="Thumbnail" class="form-label">Миниатюра</label>
<input type="file" accept="image/*" class="form-control 'Thumbnail' is-invalid @enderror"
name="Thumbnail" $product value="{{$product->Thumbnail}}" @endisset>
</div>