Я создаю приложение только для API laravel 5.8 и хочу вернуть путь к изображению как путь к ресурсу API, чтобы его можно было использовать внутри атрибута источника изображения. Вот что я должен сделать, чтобы достичь этого.
1. Я запустил команду php artisan storgae:link, чтобы создать символическую ссылку с public/storage на storage/app/public.
productImages, когда новый продукт успешно создается следующим образом.public function store(Request $request)
{
// create & store the product
if ($product = Product::create([
'name' => $request->name,
'category' => $request->category,
'status' => $request->status,
'price' => $request->price,
'interest' => $request->interest,
])) {
// store the product image
$file = $request->file('image');
$destinationPath = "public/images/products";
$filename = 'pramopro_' . $product->name . '_' . $product->id . '.' . $file->extension();
Storage::putFileAs($destinationPath, $file, $filename);
ProductImage::create([
'product_id' => $product->id,
'name' => $filename
]);
}
// return new product
return new ProductResource($product);
}
public function toArray($request)
{
return [
'id' => $this->id,
'name' => $this->name,
'category' => $this->category,
'status' => $this->status,
'price' => $this->price,
'interest' => $this->interest,
'hidden' => $this->hidden,
'imageUrl' => asset('images/products/' . $this->image->name)
];
}
Тестируя его на моей локальной подаче, я получаю такой путь
{
"id": 1,
"name": "dpk",
"category": "fuel",
"status": "open",
"price": 100000,
"interest": 0.2,
"hidden": 0,
"imageUrl": "http://localhost:8000/images/products/pramopro_dpk_1.jpeg"
}
Когда я пытаюсь просмотреть изображение, набрав http://localhost:8000/images/products/randomtext_1.jpeg в своем браузере, я получаю ошибку 404 not found.
Но это http://localhost:8000/storage/images/products/pramopro_dpk_1.jpeg отображает изображение, как и ожидалось.
Как мне получить путь к изображению, чтобы он работал?






функция assets() помещает вас в ваш общедоступный каталог, вам нужно добавить /storage к пути к вашему файлу, попробуйте это в своей функции toArray
'imageUrl' => asset('storage/images/products/' . $this->image->name)
Личное примечание: обработка мультимедиа в laravel может быть головной болью, я лично использую LaravelMediaLibrary от spaite.
https://github.com/spatie/laravel-medialibrary
это действительно помогло мне и сделало работу с носителями настолько простой, насколько это возможно, особенно при работе с несколькими носителями для одной и той же модели.
Я проверю
LaravelMediaLibraryпакет. На самом деле мне пришлось добавитьstorageк пути.