PHP接收App端发送文件流的方法


Posted in PHP onSeptember 23, 2016

本文实例讲述了PHP接收App端发送文件流的方法。分享给大家供大家参考,具体如下:

解决思路:

1. 客户端多张图片进行循环上传,同时附带参数,并用一定规则组合生产数据流(图片数据放在最后)
2. 使用数据流进行传输,php服务端用file_get_content('php://input')进行接收
3. 传输完毕后将数据流按照规则分割,取出最后的图片数据,并写入图片文件

示例代码:

以下代码是发送单张图片和参数PHP文件,多张图片可循环调用。

<?php
/* curl_post.php */
// 设置请求的POST地址,必须是包含网址的域名,不能是相对路径
$url = 'http://www.xxx.com/post.php';
$pic_data = file_get_contents('./me.jpg');
$data = [
  'username=chafang_'.rand(100, 999),
  'password='.md5('123456'),
  'pic=' => $pic_data, // 这里存放图片数据
];
// 使用 '#####' 进行分割数组
$strData = implode('#####', $data);
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
//设置头文件的信息作为数据流输出
curl_setopt($curl, CURLOPT_HEADER, 0);
//设置获取的信息以文件流的形式返回,而不是直接输出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//设置post方式提交
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $strData);
$data = curl_exec($curl);
curl_close($curl);
// 显示post的返回值
echo ($data);

接收curl请求的PHP文件,返回json格式

<?php
/* post.php */
$content = file_get_contents("php://input");
$domain = 'http://www.xxx.com/';
// 注意这里需要有写权限
$filename = 'update/'.time().'_'.rand(100000, 999999).'.jpg';
$data = explode('#####', $content, 3);
$count = count($data);
$result = [];
// 如果文件写入成功
if (file_put_contents($filename, $data[$count - 1]))
{
  // 删除数据中最后一个元素(就是图片)
  unset($data[$count - 1]);
  foreach ($data as $val)
  {
    // 返回参数,且参数值不能存在 '=' 号
    $tmp = explode('=', $val, 2);
    $result[$tmp[0]] = $tmp[1];
  }
  // 组合图片访问地址
  $result['pic'] = $domain.$filename;
}
echo json_encode($result);

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
php面向对象全攻略 (十四) php5接口技术
Sep 30 PHP
php程序的国际化实现方法(利用gettext)
Aug 14 PHP
PHP设置图片文件上传大小的具体实现方法
Oct 11 PHP
PHP反射机制用法实例
Aug 28 PHP
php获取根域名方法汇总
Oct 28 PHP
php定义一个参数带有默认值的函数实例分析
Mar 16 PHP
Yii2中cookie用法示例分析
Jul 18 PHP
数组任意位置插入元素,删除特定元素的实例
Mar 02 PHP
php readfile()修改文件上传大小设置
Aug 11 PHP
PHP高效获取远程图片尺寸和大小的实现方法
Oct 20 PHP
PHP切割汉字的常用方法实例总结
Apr 27 PHP
goto语法在PHP中的使用教程
Sep 17 PHP
适合PHP初学者阅读的4本经典书籍
Sep 23 #PHP
php版微信开发之接收消息,自动判断及回复相应消息的方法
Sep 23 #PHP
php版微信开发Token验证失败或请求URL超时问题的解决方法
Sep 23 #PHP
php版微信公众账号第三方管理工具开发简明教程
Sep 23 #PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
Sep 23 #PHP
php使用CURL模拟GET与POST向微信接口提交及获取数据的方法
Sep 23 #PHP
php版微信公众平台之微信网页登陆授权示例
Sep 23 #PHP
You might like
php实现微信扫码自动登陆与注册功能
2016/09/22 PHP
php使用socket调用http和smtp协议实例小结
2019/07/26 PHP
Laravel 不同生产环境服务器的判断实践
2019/10/15 PHP
在IE下:float属性会影响offsetTop的取值
2006/12/22 Javascript
基于jquery的超简单上下翻
2010/04/20 Javascript
js里怎么取select标签里的值并修改
2012/12/10 Javascript
深入浅析JavaScript系列(13):This? Yes,this!
2016/01/05 Javascript
前端js实现文件的断点续传 后端PHP文件接收
2016/10/14 Javascript
JS实现获取来自百度,Google,soso,sogou关键词的方法
2016/12/21 Javascript
zTree实现节点修改的实时刷新功能
2017/03/20 Javascript
jQuery插件DataTables分页开发心得体会
2017/08/22 jQuery
vue中for循环更改数据的实例代码(数据变化但页面数据未变)
2017/09/15 Javascript
jQuery仿移动端支付宝键盘的实现代码
2018/08/15 jQuery
微信小程序动画(Animation)的实现及执行步骤
2018/10/28 Javascript
详解vue中使用vue-quill-editor富文本小结(图片上传)
2019/04/24 Javascript
简单谈谈offsetleft、offsetTop和offsetParent
2020/12/04 Javascript
[04:03]2014DOTA2西雅图国际邀请赛 LGD战队巡礼
2014/07/07 DOTA
在Python中处理字符串之isdigit()方法的使用
2015/05/18 Python
浅谈Python Opencv中gamma变换的使用详解
2018/04/02 Python
flask入门之文件上传与邮件发送示例
2018/07/18 Python
python随机在一张图像上截取任意大小图片的方法
2019/01/24 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
2019/05/28 Python
Python获取数据库数据并保存在excel表格中的方法
2019/06/12 Python
css3动画事件—webkitAnimationEnd与计时器time事件
2013/01/31 HTML / CSS
处理HTML5新标签的浏览器兼容版问题
2017/03/13 HTML / CSS
美味咖啡的顶级烘焙师:Cafe Britt
2018/03/15 全球购物
班级安全教育实施方案
2014/02/23 职场文书
葛优非诚勿扰搞笑征婚台词
2014/03/17 职场文书
校园标语大全
2014/06/19 职场文书
总经理检讨书
2014/09/15 职场文书
2014党员批评和自我批评思想汇报
2014/09/21 职场文书
广告业务员岗位职责
2015/02/13 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
微信小程序基础教程之echart的使用
2021/06/01 Javascript
Java tomcat手动配置servlet详解
2021/11/27 Java/Android
TV动画《政宗君的复仇》第二季制作决定PV公布
2022/04/02 日漫