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之Smarty入门
Jan 04 PHP
一步一步学习PHP(7) php 字符串相关应用
Mar 05 PHP
PHP extract 将数组拆分成多个变量的函数
Jun 30 PHP
浅析php中常量,变量的作用域和生存周期
Aug 10 PHP
PHP中file_exists函数不支持中文名的解决方法
Jul 26 PHP
php操作csv文件代码实例汇总
Sep 22 PHP
php专用数组排序类ArraySortUtil用法实例
Apr 03 PHP
php修改文件上传限制方法汇总
Apr 07 PHP
Symfony2框架学习笔记之表单用法详解
Mar 18 PHP
Smarty高级应用之缓存操作技巧分析
May 14 PHP
php微信开发自定义菜单
Aug 27 PHP
centos下file_put_contents()无法写入文件的原因及解决方法
Apr 01 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
2006/12/13 PHP
php中全局变量global的使用演示代码
2011/05/18 PHP
php查看网页源代码的方法
2015/03/13 PHP
PHP下载生成的csv文件及问题总结
2015/08/06 PHP
PHP信号量基本用法实例详解
2016/02/12 PHP
Yii2实现多域名跨域同步登录退出
2017/02/04 PHP
PHP多进程简单实例小结
2019/11/09 PHP
js计数器代码
2006/11/04 Javascript
简单通用的JS滑动门代码
2008/12/19 Javascript
jQuery中队列queue()函数的实例教程
2016/05/03 Javascript
bootstrap学习使用(导航条、下拉菜单、轮播、栅格布局等)
2016/12/01 Javascript
AugularJS从入门到实践(必看篇)
2017/07/10 Javascript
angularjs结合html5实现拖拽功能
2018/06/25 Javascript
基于javascript处理二进制图片流过程详解
2020/06/08 Javascript
JS highcharts动态柱状图原理及实现
2020/10/16 Javascript
[02:14]完美“圣”典2016风云人物:xiao8专访
2016/12/01 DOTA
[01:13:01]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第三场
2018/04/05 DOTA
python实现的重启关机程序实例
2014/08/21 Python
Python检测网络延迟的代码
2018/05/15 Python
python实现控制COM口的示例
2019/07/03 Python
python实现差分隐私Laplace机制详解
2019/11/25 Python
Django实现celery定时任务过程解析
2020/04/21 Python
探究 canvas 绘图中撤销(undo)功能的实现方式详解
2018/05/17 HTML / CSS
Alba Moda德国网上商店:意大利时尚女装销售
2016/11/14 全球购物
在家更换处方镜片:Lensabl
2019/05/01 全球购物
上海中网科技笔试题
2012/02/19 面试题
自我评价如何写好?
2014/01/05 职场文书
护理专业大学生自我推荐信
2014/01/25 职场文书
《果园机器人》教学反思
2014/04/13 职场文书
反邪教警示教育方案
2014/05/13 职场文书
正科级干部考察材料
2014/05/29 职场文书
ktv好的活动方案
2014/08/15 职场文书
大学军训的体会
2014/11/08 职场文书
2015中秋祝酒词
2015/08/12 职场文书
申论不会写怎么办?教您掌握这6点思维和原则
2019/07/17 职场文书
通过Qt连接OpenGauss数据库的详细教程
2021/06/23 PostgreSQL