TianLiangZhou/shrimp-wechat-sdk

View on GitHub
src/File/MediaFile.php

Summary

Maintainability
A
25 mins
Test Coverage
<?php
/**
 * Created by PhpStorm.
 * User: meshell
 * Date: 2017/11/20
 * Time: 19:19
 */

declare(strict_types=1);

namespace Shrimp\File;

use Exception;
use Shrimp\Support\Collection;

/**
 * Class MediaFile
 * @package Shrimp\File
 */
class MediaFile extends Collection
{

    /**
     * MediaFile constructor.
     * @param string|array $file {$_FILE || example.png}
     * @throws Exception
     */
    public function __construct($file)
    {
        if ($file) {
            if (is_file($file)) {
                $this->addFile($this->formatFile($file));
            } elseif (is_array($file)) {
                $this->addFile($file);
            }
        }
    }

    /**
     * @param $file
     * @return array
     * @throws Exception
     */
    private function formatFile($file)
    {
        if (!file_exists($file)) {
            throw new Exception("文件不存在!");
        }
        $info = pathinfo($file);
        $type = "";
        if (MimeType::$mine[$info['extension']]) {
            $type = is_array(MimeType::$mine[$info['extension']])
                ? MimeType::$mine[$info['extension']][0]
                : MimeType::$mine[$info['extension']];
        }
        if (empty($type)) {
            throw new Exception("不能识别的文件");
        }
        return [
            'name' => $info['basename'],
            'type' => $type,
            'size' => filesize($file),
            'tmp_name' => $file,
            'error'    => 0,
        ];
    }
    /**
     * @param array $files
     */
    private function addFile(array $files)
    {
        $keys = array_keys($files);
        if (!is_array($files[$keys[0]])) {
            $files = [$files];
        }
        foreach ($files as $name => $file) {
            if (!isset($file['name']) || !isset($file['type']) ||
            !isset($file['size']) || !isset($file['tmp_name']) || !isset($file['error'])) {
                continue;
            }
            $this->add(new File($file));
        }
    }
}