繁体   English   中英

Laravel 通过 API 上传多个图像

[英]Laravel Multiple Image Upload via 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 请求时,我从 postman 收到 200 个代码,但是数据库有一个空数组作为文件名?

**** 编辑 ****

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

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

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

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);

    }
}
public function store(Request $request)
{

    if ($this->getErrorIfAny($request->all(), $this->ruls)) {
        return $this->getErrorIfAny($request->all(), $this->ruls);
    }

    if (!$request->hasFile('image_url')) {
        return response($this->getResponseFail(trans('my_keywords.uploadFileNotFound'), false), 400);
    }

    $allowedfileExtension = ['jpg', 'png', 'jpeg'];

    $files = $request->file('image_url');

    $number_photos_upload = count($files);

    $pictures_available_upload = array();

    for ($i = 0; $i < count($files); $i++) {
        $extension = $files[$i]->getClientOriginalExtension();

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

        if ($check) {
            $pictures_available_upload[$i] = $files[$i];
        }
    }

    $number_images_success_uploded = 0;

    $images_urls = array();

    for ($i = 0; $i < count($pictures_available_upload); $i++) {

        $image = $pictures_available_upload[$i];

        $path = config('paths.storage_path') .
            $image->store(config('paths.store_image_path'), 'public');

        //store image file into directory and db
        $store_images = new StoreImages();
        $store_images['store_id'] = $request['store_id'];
        $store_images['image_url'] = $path;
        $result = $store_images->save();
        if ($result) {
            $images_urls[$i] = $path;
            $number_images_success_uploded = $number_images_success_uploded + 1;
        }
    }

    if ($number_images_success_uploded == 0) {
        return response($this->getResponseFail(trans('my_keywords.invalidFileFormat'), false), 422);
    } else {
        $data = [
            'store_id' => (int) $request['store_id'],
            'number_photos_upload' => $number_photos_upload,
            'number_images_success_uploded' => $number_images_success_uploded,
            'images' => $images_urls,
        ];
        return response($this->getResponse(__('my_keywords.operationSuccessfully'), true, $data), 200);
    }
}

作为api发送二进制文件。

php file_get_contents

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM