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编程之高级技巧——利用Mysql函数
Oct 09 PHP
phpMyAdmin 安装及问题总结
May 28 PHP
克隆一个新项目的快捷方式
Apr 10 PHP
PHP数组排序之sort、asort与ksort用法实例
Sep 08 PHP
php广告加载类用法实例
Sep 23 PHP
php curl 上传文件代码实例
Apr 27 PHP
PHPCMS忘记后台密码的解决办法
Oct 30 PHP
php中照片旋转 (orientation) 问题的正确处理
Feb 16 PHP
浅谈PHP发送HTTP请求的几种方式
Jul 25 PHP
PHP实现深度优先搜索算法(DFS,Depth First Search)详解
Sep 16 PHP
laravel实现分页样式替换示例代码(增加首、尾页)
Sep 22 PHP
PHP array_shift()用法实例分析
Jan 07 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实现提取一个图像文件并在浏览器上显示的代码
2012/10/06 PHP
解决php-fpm.service not found问题的办法
2017/06/06 PHP
PHP自动识别当前使用移动终端
2018/05/21 PHP
javascript+canvas制作九宫格小程序
2014/12/28 Javascript
JavaScript DOM进阶方法
2015/04/13 Javascript
理解javascript中的原型和原型链
2015/07/30 Javascript
javascript动态获取登录时间和在线时长
2016/02/25 Javascript
jquery点击展示与隐藏更多内容
2016/12/03 Javascript
jQuery Easyui datagrid行内实现【添加】、【编辑】、【上移】、【下移】
2016/12/19 Javascript
js实现手机拍照上传功能
2017/01/17 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
2017/02/16 Javascript
vue指令以及dom操作详解
2017/03/04 Javascript
angularjs实现首页轮播图效果
2017/04/14 Javascript
nodejs入门教程二:创建一个简单应用示例
2017/04/24 NodeJs
Vue resource中的GET与POST请求的实例代码
2017/07/21 Javascript
使用vue构建移动应用实战代码
2017/08/02 Javascript
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
2017/08/10 Javascript
tween.js缓动补间动画算法示例
2018/02/13 Javascript
微信jssdk逻辑在vue中的运用详解
2018/11/14 Javascript
jquery登录的异步验证操作示例
2019/05/09 jQuery
vue-cli webpack配置文件分析
2019/05/20 Javascript
Vue修改项目启动端口号方法
2019/11/07 Javascript
JavaScript如何实现图片处理与合成
2020/05/29 Javascript
Python解惑之整数比较详解
2017/04/24 Python
查看TensorFlow checkpoint文件中的变量名和对应值方法
2018/06/14 Python
为何人工智能(AI)首选Python?读完这篇文章你就知道了(推荐)
2019/04/06 Python
python实现websocket的客户端压力测试
2019/06/25 Python
python用什么编辑器进行项目开发
2020/06/17 Python
python实现学生信息管理系统(精简版)
2020/11/27 Python
python 装饰器重要在哪
2021/02/14 Python
Ratchet 模态框的实现
2020/08/19 HTML / CSS
德国珠宝和手表在线商店:VALMANO
2019/03/24 全球购物
庆中秋节主题活动方案
2014/02/03 职场文书
不服从公司安排检讨书
2014/09/24 职场文书
2015年党务公开工作总结
2015/05/19 职场文书
HTML中实现音乐或视频自动播放案例详解
2022/05/30 HTML / CSS