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 相关文章推荐
生成ubuntu自动切换壁纸xml文件的php代码
Jul 17 PHP
php若干单维数组遍历方法的比较
Sep 20 PHP
php判断当前操作系统类型
Oct 28 PHP
PHP常见数组函数用法小结
Mar 21 PHP
php for 循环使用的简单实例
Jun 02 PHP
PHP常用的三种设计模式汇总
Aug 28 PHP
PHPCMS2008广告模板SQL注入漏洞修复
Oct 11 PHP
PHP自带方法验证邮箱、URL、IP是否合法的函数
Dec 08 PHP
phpMyAdmin通过密码漏洞留后门文件
Nov 20 PHP
PHP XML Expat解析器知识点总结
Feb 15 PHP
YII2框架中查询生成器Query()的使用方法示例
Mar 18 PHP
浅谈php常用的7大框架的优缺点
Jul 20 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
织梦sitemap地图实时推送给百度的教程
2015/08/03 PHP
php设计模式之观察者模式定义与用法经典示例
2019/09/19 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
2019/10/10 PHP
jQuery第三课 修改元素属性及内容的代码
2010/03/14 Javascript
jquery 新手学习常见问题解决方法
2010/04/18 Javascript
ymPrompt的doHandler方法来实现获取子窗口返回值的方法
2010/06/25 Javascript
JQuery 应用 JQuery.groupTable.js
2010/12/15 Javascript
JavaScript验证图片类型(扩展名)的函数分享
2014/05/05 Javascript
jQuery学习总结之jQuery事件
2014/06/30 Javascript
jquery操作checkbox示例分享
2014/07/21 Javascript
js实现飞入星星特效代码
2014/10/17 Javascript
AngularJs根据访问的页面动态加载Controller的解决方案
2015/02/04 Javascript
jQuery实现鼠标经过像翻页和描点链接效果
2016/08/08 Javascript
JavaScript中 DOM操作方法小结
2017/04/25 Javascript
Vue 2.0入门基础知识之内部指令详解
2017/10/15 Javascript
Vue+SpringBoot开发V部落博客管理平台
2017/12/27 Javascript
angularjs 获取默认选中的单选按钮的value方法
2018/02/28 Javascript
js实现移动端轮播图
2020/12/21 Javascript
优化Vue项目编译文件大小的方法步骤
2019/05/27 Javascript
echarts统计x轴区间的数值实例代码详解
2019/07/07 Javascript
[02:42]DOTA2城市挑战赛收官在即 四强之争风起云涌
2018/06/05 DOTA
Python环境下安装使用异步任务队列包Celery的基础教程
2016/05/07 Python
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
利用Python爬取微博数据生成词云图片实例代码
2017/08/31 Python
python内存监控工具memory_profiler和guppy的用法详解
2019/07/29 Python
Python字典添加,删除,查询等相关操作方法详解
2020/02/07 Python
django 多数据库及分库实现方式
2020/04/01 Python
python 使用raw socket进行TCP SYN扫描实例
2020/05/05 Python
哈利波特商店:Harry Potter Shop
2018/11/30 全球购物
自我评价怎么写好呢?
2013/12/05 职场文书
电子商务自荐书范文
2014/01/04 职场文书
秋冬农业生产标语
2014/10/09 职场文书
2014个人年度工作总结
2014/12/15 职场文书
公司行政主管岗位职责
2015/04/09 职场文书
2015年教师个人业务工作总结
2015/10/23 职场文书
python运算符之与用户交互
2022/04/13 Python