Laravel Spatie Medialibrary:通过 REST API 上传多个图像

wiw*_*978 3 laravel

我在 Laravel 应用程序中使用Spatie MediaLibrary库。我想通过 REST API 将 0 张或多张照片上传到我的应用程序。

photo当属性包含 1 个文件时我可以让它工作

public function store(Request $request)
{
    $request->validate([
        'name'          =>      'required',
        'slug'          =>      'required',
        'description'   =>      'required',
        'price'         =>      'required|integer',
        'photo'         =>      'nullable|file'
    ]);
    $listing =  Listing::Create([
        'user_id'       =>      auth('api')->user()->id,
        'name'          =>      $request->name,
        'slug'          =>      $request->slug,
        'description'   =>      $request->description,
        'price'         =>      $request->price,
    ]);
    // stores the photo
    if ($request->hasFile('photo')) {
        $listing->addMediaFromRequest('photo')->toMediaCollection('photos');
    }
    return new ListingResource($listing);
}
Run Code Online (Sandbox Code Playgroud)

邮递员请求如下所示: 在此输入图像描述

我知道想要更改代码,以便它可以处理请求中的多张照片。我在上面的控制器中使用以下代码来执行此操作:

if ($request->hasFile('photo')) {
   foreach ($request->input('photo', []) as $photo) {
       $listing->addMediaFromRequest('photo')->toMediaCollection('photos');
   }
}
Run Code Online (Sandbox Code Playgroud)

我已将属性更改为photos[]而不是photo.

在此输入图像描述

该代码甚至从未进入 foreach 循环。

有人知道如何解决这个问题吗?

wiw*_*978 7

显然 Spatie Medialibrary 有一个名为 的函数addMultipleMediaFromRequest。完整的代码现在是

public function store(Request $request)
{
   $request->validate([
        'name'          =>      'required',
        'slug'          =>      'required',
        'description'   =>      'required',
        'price'         =>      'required|integer',
        'photo'         =>      'nullable'
    ]);

    $listing =  Listing::Create([
        'user_id'       =>      auth('api')->user()->id,
        'name'          =>      $request->name,
        'slug'          =>      $request->slug,
        'description'   =>      $request->description,
        'price'         =>      $request->price,
    ]);

    if ($request->hasFile('photo')) {
        $fileAdders = $listing->addMultipleMediaFromRequest(['photo'])
            ->each(function ($fileAdder) {
                $fileAdder->toMediaCollection('photos');
            });
    }

    return new ListingResource($listing);
}
Run Code Online (Sandbox Code Playgroud)

在 Postman 中,我这样称呼它: 在此输入图像描述

文档参考