首页 > 解决方案 > Laravel 通过 API 上传多张图片

问题描述

我正在创建一个媒体 API,这是第一次创建 API。

我有这个代码:

/**
* Store a newly created resource in storage.
*
* @param  \App\Http\Requests\UploadRequest $request
* @return \Illuminate\Http\Response
*/
public function store(UploadRequest $request)
{
    if(!$request->hasFile('fileName')) {
        return response()->json(['upload_file_not_found'], 400);
    }
    $file = $request->file('fileName');
    if(!$file->isValid()) {
        return response()->json(['invalid_file_upload'], 400);
    } 

    if($request->hasfile('fileName'))
    {
        $media = new Media();
        $data = array();
        foreach($request->file('fileName') as $image)
        {
            $rdm = uniqid(5);
            $name= $rdm .'-'.$image->getClientOriginalName();
            $image->move(public_path().'/images/', $name);
            $data[] = $name;

        }

        $media->fileName = json_encode($data);
        $media->clientId = $request->clientId;
        $media->uploadedBy = Auth::user()->id;
        $media->save();

    }

    return ["success" => "Your media file has been successfully uploaded"];
}

请你能帮我为什么它不将图像上传到公共路径。它也不在数据库中存储任何内容。发送我的 POST 请求时,我从邮递员那里得到一个 200 代码,但是数据库有一个空数组作为文件名?

**** 编辑 ****

我正在上传多张图片。因为我正在为移动应用程序制作 api,所以没有这种形式。该请求是对 URL /api/v1/media 的 POST 请求

标签: phplaravelapi

解决方案


这是我想出的可行的解决方案:)

这会上传多个文件并检查有效文件的扩展名。

public function store(UploadRequest $request)
{
    if(!$request->hasFile('fileName')) {
        return response()->json(['upload_file_not_found'], 400);
    }

    $allowedfileExtension=['pdf','jpg','png'];
    $files = $request->file('fileName'); 
    $errors = [];

    foreach ($files as $file) {      

        $extension = $file->getClientOriginalExtension();

        $check = in_array($extension,$allowedfileExtension);

        if($check) {
            foreach($request->fileName as $mediaFiles) {
                $media = new Media();
                $media_ext = $mediaFiles->getClientOriginalName();
                $media_no_ext = pathinfo($media_ext, PATHINFO_FILENAME);
                $mFiles = $media_no_ext . '-' . uniqid() . '.' . $extension;
                $mediaFiles->move(public_path().'/images/', $mFiles);
                $media->fileName = $mFiles;
                $media->clientId = $request->clientId;
                $media->uploadedBy = Auth::user()->id;
                $media->save();
            }
        } else {
            return response()->json(['invalid_file_format'], 422);
        }

        return response()->json(['file_uploaded'], 200);

    }
}

推荐阅读