PHP实现上传图片到 zimg 服务器


Posted in PHP onOctober 19, 2016

最近我们项目需要一台图片服务器存储用户头像,我们使用 zimg 处理和存储图片,下面简单介绍一下如何使用 PHP 上传图片到 zimg,并获取相应图片的返回信息

使用 curl 库实现上传

根据 zimg 使用文档,我们想要让 zimg 返回 json 信息,就必须 raw_post 上传图片,下面是演示代码

$upload_url = 'http://192.168.0.99:5000/upload';

$image_file = './test.jpg';

// 获取图片后缀
$value = explode(".", $image_file);
$extension = strtolower(array_pop($value));

// 生成本地临时存储路径,并生成相应文件夹
$dir = 'aurthur';
$save_path = 'uploads/'.$dir.'/'.date('Y').'/'.date('md').'/';
$save_rule = md5(uniqid(mt_rand(), true));
if(!is_dir($save_path)){
  if(false === mkdir($save_path, 0700, true)){
    exit('创建文件夹失败');
  }
}
$save_image_file = $save_path.$save_rule.".$extension";

// 把图片存储到临时路径
file_put_contents($save_image_file, file_get_contents($image_file));

// 获取临时保存的图片的真实地址(绝对路径)
$realpath = realpath($save_image_file);

// 上传图片到 zimg 图片存储服务
$ch = curl_init();

// 将图片内容读取到变量 $post_data ;
$post_data = file_get_contents($realpath);

$headers = array();
// 一定要添加此 header
$headers[] = 'Content-Type:'.$extension;

curl_setopt($ch, CURLOPT_URL, $upload_url);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);// raw_post方式

$info = curl_exec($ch);
curl_close($ch);

$json = json_decode($info, true);
$signature = $json['info']['md5'];
echo $signature;

如果想测试代码的话,请把上面的uploadurl改成你自己的zimg服务器地址,并把image_file 改成你需要上传的图片的路径

PHP 相关文章推荐
ASP知识讲座四
Oct 09 PHP
用PHP产生动态的影像图
Oct 09 PHP
php 破解防盗链图片函数
Dec 09 PHP
PHP容易忘记的知识点分享
Apr 30 PHP
PHP转换IP地址到真实地址的方法详解
Jun 09 PHP
PHP调试函数和日志记录函数分享
Jan 31 PHP
PHP中的print_r 与 var_dump 输出数组
Jun 13 PHP
php封装json通信接口详解及实例
Mar 07 PHP
PHP简单获取随机数的常用方法小结
Jun 07 PHP
浅谈PHP中如何实现Hook机制
Nov 14 PHP
使用laravel的Eloquent模型如何获取数据库的指定列
Oct 17 PHP
Laravel中获取IP的真实地理位置
Apr 01 PHP
php通过会话控制实现身份验证实例
Oct 18 #PHP
利用php_imagick实现复古效果的方法
Oct 18 #PHP
php封装的page分页类完整实例
Oct 18 #PHP
php封装的单文件(图片)上传类完整实例
Oct 18 #PHP
Thinkphp实现短信验证注册功能
Oct 18 #PHP
php基于单例模式封装mysql类完整实例
Oct 18 #PHP
php封装的mysqli类完整实例
Oct 18 #PHP
You might like
php自定义函数之递归删除文件及目录
2010/08/08 PHP
php页面缓存ob系列函数介绍
2012/10/18 PHP
php解决约瑟夫环示例
2014/04/09 PHP
destoon复制新模块的方法
2014/06/21 PHP
详解PHP swoole process的使用方法
2017/08/26 PHP
javascript和HTML5利用canvas构建猜牌游戏实现算法
2013/07/17 Javascript
简单选项卡 js和jquery制作方法分享
2014/02/26 Javascript
JS中三目运算符和if else的区别分析与示例
2014/11/21 Javascript
js实现3D图片逐张轮播幻灯片特效代码分享
2015/09/09 Javascript
jQuery实现点击按钮弹出可关闭层的浮动层插件
2015/09/19 Javascript
AngularJs 60分钟入门基础教程
2016/04/03 Javascript
Javascript中函数名.length属性用法分析(对比arguments.length)
2016/09/16 Javascript
微信小程序 WXML、WXSS 和JS介绍及详解
2016/10/08 Javascript
JS IOS/iPhone的Safari浏览器不兼容Javascript中的Date()问题如何解决
2016/11/11 Javascript
JS判断鼠标进入容器的方向与window.open新窗口被拦截的问题
2016/12/23 Javascript
vue component组件使用方法详解
2017/07/14 Javascript
vue实现前进刷新后退不刷新效果
2018/01/26 Javascript
Jquery的autocomplete插件用法及参数讲解
2019/03/12 jQuery
详解vue 图片上传功能
2019/04/30 Javascript
详解Vue.js 作用域、slot用法(单个slot、具名slot)
2019/10/15 Javascript
如何修改Vue打包后文件的接口地址配置的方法
2020/04/22 Javascript
[01:09:40]Newbee vs Pain 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python中pip安装非PyPI官网第三方库的方法
2015/06/02 Python
python通过百度地图API获取某地址的经纬度详解
2018/01/28 Python
Python实现的根据IP地址计算子网掩码位数功能示例
2018/05/23 Python
python-地图可视化组件folium的操作
2020/12/14 Python
python简单实现插入排序实例代码
2020/12/16 Python
CSS3 对过渡(transition)进行调速以及延时
2020/10/21 HTML / CSS
美国汽配连锁巨头Pep Boys官网:轮胎更换、汽车维修服务和汽车零部件
2017/01/14 全球购物
linux面试题参考答案(9)
2015/01/07 面试题
高一历史教学反思
2014/01/13 职场文书
3.12植树节活动总结2014
2014/03/13 职场文书
2016年幼儿园庆六一开幕词
2016/03/04 职场文书
新手入门Mysql--sql执行过程
2021/06/20 MySQL
唤醒紫霞仙子,携手再游三界!大话手游X《大话西游》电影合作专属剧情任务
2022/04/03 其他游戏
Hive导入csv文件示例
2022/06/25 数据库