php接收来自iOS的二进制图片流并保存图片

作者: shaneZhang 分类: 互联网技术 发布时间: 2016-08-06 19:34

最近在做芝麻信用的接入,这个周末在家做了一个demo,写了一个利用php来上传图片的接口,因为之前一直都是写纯接口,并未涉及到图片上传等操作,所以在做这个接口demo的时候也遇到了一些麻烦,不过还好,经过了各种搜索和查询资料,终于把这个接口弄好了,现在将其记录如下。只是一个简单的图片二进制流上传接口,因为主要还是以客户端开发为主,php端也仅仅是略微涉猎一些,所以代码质量肯定不是很高,看不惯的多多包涵。。。。

<?php

/**
 * Created by PhpStorm.
 * User: yuqingzhang
 * Date: 16/8/5
 * Time: 21:25
 */
error_reporting(0);

class upload
{
    const ROOT_PATH = './';
    const FAIL_WRITE_DATA = 'Fail to write data';
    //没有数据流
    const NO_STREAM_DATA = 'The post data is empty';
    //图片类型不正确
    const NOT_CORRECT_TYPE = 'Not a correct image type';
    //不能创建文件
    const CAN_NOT_CREATE_FILE = 'Can not create file';
    //上传图片名称
    public $image_name;
    //图片保存名称
    public $save_name;
    //图片保存路径
    public $save_dir;
    //目录+图片完整路径
    public $save_fullpath;

    /**
     * 构造函数
     * @param String $save_name 保存图片名称
     * @param String $save_dir 保存路径名称
     */
    public function __construct($save_name, $save_dir) {
        //set_error_handler ( $this->error_handler () );

        //设置保存图片名称,若未设置,则随机产生一个唯一文件名
        $this->save_name = $save_name ? $save_name : md5 ( mt_rand (), uniqid () );
        //设置保存图片路径,若未设置,则使用年/月/日格式进行目录存储
        $this->save_dir =  $save_dir ? self::ROOT_PATH .$save_dir : self::ROOT_PATH .date ( 'Y/m/d' );

        //创建文件夹
        @$this->create_dir ( $this->save_dir );
        //设置目录+图片完整路径
        $this->save_fullpath = $this->save_dir . '/' . $this->save_name;
    }
    //兼容PHP4
    public function image($save_name) {
        $this->__construct ( $save_name );
    }
    /**
     * 创建文件夹
     * @param String $dirName 文件夹路径名
     */
    public function create_dir($dirName, $recursive = 1,$mode=0777) {
        ! is_dir ( $dirName ) && mkdir ( $dirName,$mode,$recursive );
    }
    /**
     * 获取图片信息,返回图片的宽、高、类型、大小、图片mine类型
     * @param String $imageName 图片名称
     */
    public function getimageInfo($imageName = '') {
        $imageInfo = getimagesize ( $imageName );
        if ($imageInfo !== false) {
            $imageType = strtolower ( substr ( image_type_to_extension ( $imageInfo [2] ), 1 ) );
            $imageSize = filesize ( $imageInfo );
            return $info = array ('width' => $imageInfo [0], 'height' => $imageInfo [1], 'type' => $imageType, 'size' => $imageSize, 'mine' => $imageInfo ['mine'] );
        } else {
            //不是合法的图片
            return false;
        }

    }

    /*private function error_handler($a, $b) {
     echo $a, $b;
    }*/
    public  function demo(){
        $filedata = $_REQUEST['photo'];
        $data = base64_decode($filedata);
        $image = imagecreatefromstring($data);
        if ($image){
            $image = imagejpeg($image,$this->save_fullpath);
            imagedestroy($image);
            $msg = '图片上传成功,图片地址为:'.$this->save_fullpath;
            $res = array('result'=>0,'msg'=>$msg,'image'=>$this->save_fullpath);
            echo json_encode($res);
        }
        else
        {
            $res = array('result'=>-1,'msg'=>'图片上传失败','image'=>'');
            echo json_encode($res);
        }
    }

    public function get_millisecond()
    {
        list($usec, $sec) = explode(" ", microtime());
        $msec = round($usec * 1000);
        return $msec;

    }

}
$time = date("YmdHis");
$imgName = (string)($time.'.jpg');
$upload = new upload($imgName, 'zhima');
$upload->demo();

如果觉得我的文章对您有用,请随意打赏。如果有其他问题请联系博主QQ(909491009)或者下方留言!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注