尝试使用laflavel中的guzzlehttp客户端上传多个图像

时间:2016-12-29 06:11:56

标签: php laravel image-uploading guzzle guzzlehttp

我正在尝试使用guzzlehttp客户端上传多个图像。我有一个表格,其中有其他类型的数据('id','date','name'e.t.c ..)和图像。

我希望通过Api请求保存其他数据以及图片上传。

我可以保存其他数据,但上传图片时出现问题。

在API中我通过

访问我的图像文件
$request->file('images')

但它显示为空。

我调用API的代码

$images = $request->file('images');

    foreach ($images as $image)
    {
        $body[] = [
            'Content-type' => 'multipart/form-data',
            'name'         => $image->getClientOriginalName(),
            'contents'     => fopen($image->getRealPath(), 'r')
        ];
    }

    $data = $request->all();
    $client = new Client();

    $response = $client->request('POST', $url, [
        'multipart' => $body,
        'json'      => $data
    ]);

我正在处理Api上传图片

if ($request->hasFile('images'))
            { 
                $images = $request->file('images');
                foreach ($images as $image)
                {
                    $imageRules = [
                        'file' => 'mimes:png,jpeg,jpg,JPG|max:1024'
                    ];

                    $imageMessages = [
                        'file.mimes' => 'One of the images/video is not valid. (only .png, .jpeg, .jpg, .mp4, .x-flv, .x-mpegURL, .MP2T, .3gpp, .quicktime, .x-msvideo, .x-ms-wmv are accepted)',
                        'file.max'   => 'Image size cannot br more than 1 MB'
                    ];

                    $imageValidator = Validator::make(['file' => $image], $imageRules, $imageMessages);

                    if ($imageValidator->fails())
                    {
                        return response()->json(['success' => false, 'error' => $imageValidator->messages()->first(), 'dashRedirectUrl' => $redirectRoute]);
                    }
                }
                $directPath = '/ticket/' . $ticket->id . '/mapping/' . $mappingId . '/images/';

                foreach ($images as $image)
                {
                    $option = ['isWatermark' => false];

                    $imageName = $this->uploadImageToServer($image, $directPath, $option);

                    $imgInsertData = [
                        'url'               => $imageName,
                        'title'             => $this->getImageTitle($image),
                        'ticket_mapping_id' => $mappingId,
                        'type_id'           => 1,
                    ];

                    TicketMappingGallery::create($imgInsertData);
                }
            }

注意::我的功能uploadImageToServer()是用于上传图像的自定义功能。

任何帮助将不胜感激。如果有任何不明确的地方,请删除评论。

1 个答案:

答案 0 :(得分:0)

尝试一下,

foreach ($image as $img) {
              $body[] = [
                'name'         => 'image[]',
                'image_path'   => $img->getPathname(),
                'image_mime'   => $img->getmimeType(),
                'image_org'    => $img->getClientOriginalName(),
                'contents'     => fopen($img->getRealPath(), 'r')
              ];
            }
  $requestOptions = ['query' => $data, 'multipart' => $body
              ];