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 相关文章推荐
echo(),print(),print_r()之间的区别?
Nov 19 PHP
jQuery+php实现ajax文件即时上传的详解
Jun 17 PHP
php判断表是否存在的方法
Jun 18 PHP
常见的四种POST 提交数据方式(小总结)
Oct 08 PHP
全新Mac配置PHP开发环境教程
Feb 03 PHP
Symfony2 session用法实例分析
Feb 04 PHP
php远程下载类分享
Apr 13 PHP
php中使用websocket详解
Sep 23 PHP
PHP之十六个魔术方法详细介绍
Nov 01 PHP
详解Yii实现分页的两种方法
Jan 14 PHP
Yii2.0多文件上传实例说明
Jul 24 PHP
深入解析PHP底层机制及相关原理
Dec 11 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
使ecshop模板中可引用常量的实现方法
2011/06/02 PHP
php正则表达式(regar expression)
2011/09/10 PHP
php使用cookie保存用户登录的用户名实例
2015/01/26 PHP
laravel 5 实现模板主题功能(续)
2015/03/02 PHP
Windows下Apache + PHP SESSION丢失的解决过程全纪录
2015/04/07 PHP
php实现猴子选大王问题算法实例
2015/04/20 PHP
Thinkphp5.0 框架Model模型简单用法分析
2019/10/11 PHP
javascript(js)的小数点乘法除法问题详解
2014/03/07 Javascript
jQuery处理json数据返回数组和输出的方法
2015/03/11 Javascript
jquery计算鼠标和指定元素之间距离的方法
2015/06/26 Javascript
JS中的==运算: [''] == false —>true
2016/07/24 Javascript
js 文字超出长度用省略号代替,鼠标悬停并以悬浮框显示实例
2016/12/06 Javascript
nodejs入门教程二:创建一个简单应用示例
2017/04/24 NodeJs
ajax请求data遇到的问题分析
2018/01/18 Javascript
解决修复npm安装全局模块权限的问题
2018/05/17 Javascript
vue实现多个元素或多个组件之间动画效果
2018/09/25 Javascript
vue子传父关于.sync与$emit的实现
2019/11/05 Javascript
js代码实现轮播图
2020/05/04 Javascript
解决vue-loader加载不上的问题
2020/10/21 Javascript
[01:03]PWL开团时刻DAY6——别打我
2020/11/05 DOTA
Python中获取对象信息的方法
2015/04/27 Python
Python实现登录人人网并抓取新鲜事的方法
2015/05/11 Python
matplotlib简介,安装和简单实例代码
2017/12/26 Python
基于python内置函数与匿名函数详解
2018/01/09 Python
pandas表连接 索引上的合并方法
2018/06/08 Python
python url 参数修改方法
2018/12/26 Python
python正则爬取某段子网站前20页段子(request库)过程解析
2019/08/10 Python
Python pandas库中的isnull()详解
2019/12/26 Python
浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)
2020/06/04 Python
全球销量第一生发产品:Viviscal
2017/12/21 全球购物
韩国乐天网上商城:Lotte iMall
2021/02/03 全球购物
高中生学习的自我评价
2013/12/14 职场文书
服装厂厂长职责
2013/12/16 职场文书
计算机学生的自我评价分享
2014/02/18 职场文书
畜牧兽医本科生的自我评价
2014/03/03 职场文书
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
2022/03/21 Java/Android