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 相关文章推荐
比较全的PHP 会话(session 时间设定)使用入门代码
Jun 05 PHP
php与XML、XSLT、Mysql的结合运用实现代码
Nov 19 PHP
php cache类代码(php数据缓存类)
Apr 15 PHP
php数组函数序列之array_key_exists() - 查找数组键名是否存在
Oct 29 PHP
PHP 登录记住密码实现思路
May 07 PHP
PHP header()函数常用方法总结
Apr 11 PHP
thinkPHP查询方式小结
Jan 09 PHP
php字符串操作常见问题小结
Oct 11 PHP
关于php几种字符串连接的效率比较(详解)
Feb 22 PHP
利用ajax和PHP实现简单的流程管理
Mar 23 PHP
Thinkphp5.0自动生成模块及目录的方法详解
Apr 17 PHP
php 实现银联商务H5支付的示例代码
Oct 12 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异步调用socket实现代码
2012/01/12 PHP
PHP的可变变量名的使用方法分享
2012/02/05 PHP
PHP Reflection API详解
2015/05/12 PHP
php微信公众号开发之现金红包
2018/04/16 PHP
Laravel中错误与异常处理的用法示例
2018/09/16 PHP
jquery下操作HTML控件的实现代码
2010/01/12 Javascript
原生JavaScript实现连连看游戏(附源码)
2013/11/05 Javascript
同域jQuery(跨)iframe操作DOM(示例代码)
2013/12/13 Javascript
js图片轮播特效代码分享
2015/09/07 Javascript
javascript中的作用域和闭包详解
2016/01/13 Javascript
关于ES6的六个小特性(二)
2017/02/20 Javascript
详解如何将angular-ui的图片轮播组件封装成一个指令
2017/05/09 Javascript
JS给按钮添加跳转功能类似a标签
2017/05/30 Javascript
React Native第三方平台分享的实例(Android,IOS双平台)
2017/08/04 Javascript
微信小程序之自定义组件的实现代码(附源码)
2018/08/02 Javascript
微信小程序实现的一键连接wifi功能示例
2019/04/24 Javascript
Vue的Eslint配置文件eslintrc.js说明与规则介绍
2020/02/03 Javascript
[06:21]2014DOTA2国际邀请赛 庆祝VG首阶段领跑;B叔为挣牛排半夜整理情报
2014/07/13 DOTA
python中管道用法入门实例
2015/06/04 Python
使用Python脚本和ADB命令实现卸载App
2017/02/10 Python
对python判断ip是否可达的实例详解
2019/01/31 Python
Python实现的爬取百度贴吧图片功能完整示例
2019/05/10 Python
Python传递参数的多种方式(小结)
2019/09/18 Python
python装饰器的特性原理详解
2019/12/25 Python
Python xml、字典、json、类四种数据类型如何实现互相转换
2020/05/27 Python
python字典的值可以修改吗
2020/06/29 Python
韩国知名的家庭购物网站:CJmall
2016/08/01 全球购物
Manduka官网:瑜伽垫、瑜伽毛巾和服装
2018/07/02 全球购物
Notino法国:购买香水和化妆品
2019/04/15 全球购物
Diamondback自行车:拥有你的冒险
2019/04/22 全球购物
简历中个人求职的自我评价模板
2013/11/29 职场文书
优秀实习自我鉴定
2013/12/04 职场文书
居委会个人对照检查材料思想汇报
2014/09/29 职场文书
公安局班子个人对照检查材料思想汇报
2014/10/09 职场文书
离职信范本
2015/06/23 职场文书
JavaScript架构localStorage特殊场景下二次封装操作
2022/06/21 Javascript