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设计模式 Proxy (代理模式)
Jun 26 PHP
PHP中文件读、写、删的操作(PHP中对文件和目录操作)
Mar 06 PHP
php上传apk后自动提取apk包信息的使用(示例下载)
Apr 26 PHP
将二维数组转为一维数组的2种方法
May 26 PHP
PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
Jun 12 PHP
php实现的九九乘法口诀表简洁版
Jul 28 PHP
浅谈PHP接收POST数据方式
Jun 05 PHP
PHP 常用的header头部定义汇总
Jun 19 PHP
浅析Yii2缓存的使用
May 10 PHP
PHP 数组基本操作小结(推荐)
Jun 13 PHP
Laravel学习教程之View模块详解
Sep 18 PHP
php设计模式之职责链模式定义与用法经典示例
Sep 19 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用正则表达式匹配URL的简单方法
2013/11/12 PHP
Laravel框架路由和控制器的绑定操作方法
2018/06/12 PHP
学习YUI.Ext 第六天--关于树TreePanel(Part 1)
2007/03/10 Javascript
javascript下数值型比较难点说明
2010/06/07 Javascript
JS根据年月获得当月天数的实现代码
2014/07/03 Javascript
jquery实现select下拉框美化特效代码分享
2015/08/18 Javascript
在Node.js中使用Javascript Generators详解
2016/05/05 Javascript
angular框架实现全选与单选chekbox的自定义
2017/07/06 Javascript
jQuery:unbind方法的使用详解
2017/08/14 jQuery
Angularjs渲染的 using 指令的星级评分系统示例
2017/11/09 Javascript
node.js部署之启动后台运行forever的方法
2018/05/23 Javascript
electron实现qq快捷登录的方法示例
2018/10/22 Javascript
微信小程序实现留言板(Storage)
2018/11/02 Javascript
关于Vue源码vm.$watch()内部原理详解
2019/04/26 Javascript
vue App.vue中的公共组件改变值触发其他组件或.vue页面监听
2019/05/31 Javascript
node.js制作一个简单的登录拦截器
2020/02/10 Javascript
基于Vue2实现移动端图片上传、压缩、拖拽排序、拖拽删除功能
2021/01/05 Vue.js
[40:13]Ti4 冒泡赛第二天 iG vs NEWBEE 2
2014/07/15 DOTA
[06:15]2016国际邀请赛中国区预选赛单车采访:我顶WINGS
2016/06/27 DOTA
[01:46]2020完美世界全国高校联赛秋季赛报名开启
2020/10/15 DOTA
Python天气预报采集器实现代码(网页爬虫)
2012/10/07 Python
Python实现的检测web服务器健康状况的小程序
2014/09/17 Python
python 3.7.0 安装配置方法图文教程
2018/08/27 Python
python根据txt文本批量创建文件夹
2020/12/08 Python
Django+python服务器部署与环境部署教程详解
2020/03/30 Python
Python数组拼接np.concatenate实现过程
2020/04/18 Python
美国知名运动产品零售商:Foot Locker
2016/07/23 全球购物
解释DataSet(ds) 和 ds as DataSet 的含义
2014/07/27 面试题
车辆维修工自我评价怎么写
2013/09/20 职场文书
大学生简历中个人的自我评价
2013/10/06 职场文书
《动手做做看》教学反思
2014/04/09 职场文书
信用卡逾期证明示例
2014/09/13 职场文书
财政局党的群众路线教育实践活动整改方案
2014/09/21 职场文书
2014年会计主管工作总结
2014/12/20 职场文书
Python还能这么玩之用Python做个小游戏的外挂
2021/06/04 Python
Android自定义ScrollView实现阻尼回弹
2022/04/01 Java/Android