php接收来自iOS的二进制图片流并保存图片
最近在做芝麻信用的接入,这个周末在家做了一个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();