首页 > 解决方案 > 使用 Swagger API 上传图片

问题描述

我正在使用 Laravel 7 开发一个 api,并使用 Swagger 编写 API 文档。我的问题是我想使用 Swagger API 上传图像,但它不仅在打印图像时显示 [object File],因此我无法将它们上传到公共文件夹。我的店铺方法

/**
 * Store a newly created Products.
 *
 * @param  \Illuminate\Http\Request  $request
 * @return \Illuminate\Http\Response
 *  
 * @OA\Post(
 *     path="/api/products",
 *     tags={"Product"},
 *     @OA\Response(response="200", description="Adding a new Product."),
 * 
 *    @OA\Parameter(
 *     name="name[]",
 *     in="query",
 *     description="Product Name",
 *     required=true,
 *     @OA\Schema(type="array", @OA\Items(type="string")),
 *   ),    
 *    @OA\Parameter(
 *     name="images[]",
 *     in="query",
 *     description="Product Images",
 *     required=true,
 *    @OA\Schema(type="array", @OA\Items(type="file")),
 *   ), 
 *   * )
 * )
 *
 */
public function upload(Request $request)
{

    $request->validate([
        "name" => "required",
        "images" => "required",
    ]);

    $images = $request->images;

    $product = Product::create([]);


    if(! is_dir(public_path("/products")) ){
        mkdir(public_path("/products"), 0777);
    }
    $id = $product->id;    
    $imageCollection = Collection::wrap($images);
    $imageCollection->each(function($image) use ($id){
        $basename = Str::random();
        $original = $basename . "." . $image->getClientOriginalExtension();
        $image->move(public_path("/products"), $original);

        ProductMedia::create([
            "product_id" => $id,
            "image" => "/products/".$original,
        ]);

    });

    return Product::where("id", $product->id)->with("productMedia")->get();

}

如何通过 Swagger API 添加图像?

标签: laravelswaggerswagger-ui

解决方案


看起来您正在使用L5 Swagger Package。您可能必须弄清楚如何添加注释以允许multipart/form-data。不知道如何通过包进行配置,但这里有一些来自Swagger 文件上传文档的更多信息


推荐阅读