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实现框架(一)
Oct 09 PHP
利用文件属性结合Session实现在线人数统计
Oct 09 PHP
自动生成文章摘要的代码[PHP 版本]
Mar 20 PHP
php 获取mysql数据库信息代码
Mar 12 PHP
实现获取http内容的php函数分享
Feb 16 PHP
Windows7下的php环境配置教程
Feb 28 PHP
php获取网页上所有链接的方法
Apr 03 PHP
ThinkPHP模板标签eq if 中区分0,null,false的方法
Mar 24 PHP
如何修改Laravel中url()函数生成URL的根地址
Aug 11 PHP
PHP高精确度运算BC函数库实例详解
Aug 15 PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
May 24 PHP
laravel5.1框架model类查询的实现方法
Oct 08 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数组函数序列之array_key_exists() - 查找数组键名是否存在
2011/10/29 PHP
php调用方法mssql_fetch_row、mssql_fetch_array、mssql_fetch_assoc和mssql_fetch_objcect读取数据的区别
2012/08/08 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
2014/06/09 PHP
Yii2.0框架behaviors方法使用实例分析
2019/09/30 PHP
在laravel中实现将查询的对象转换为多维数组的函数
2019/10/21 PHP
Div Select挡住的解决办法
2008/08/07 Javascript
页面中iframe相互传值传参
2009/12/13 Javascript
Javascript的构造函数和constructor属性
2010/01/09 Javascript
javascript实现简单的Map示例介绍
2013/12/23 Javascript
js获取和设置属性的方法
2014/02/20 Javascript
javascript进行四舍五入方法汇总
2014/12/16 Javascript
JS+CSS实现类似QQ好友及黑名单效果的树型菜单
2015/09/22 Javascript
AngularJS 所有版本下载地址
2016/09/14 Javascript
Bootstrap复选框和单选按钮美化插件(推荐)
2016/11/23 Javascript
Vue项目webpack打包部署到服务器的实例详解
2017/07/17 Javascript
jQuery仿移动端支付宝键盘的实现代码
2018/08/15 jQuery
Vue中的情侣属性$dispatch和$broadcast详解
2019/03/07 Javascript
Openlayers3实现车辆轨迹回放功能
2020/09/29 Javascript
[01:08:30]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第一场 2月28日
2021/03/11 DOTA
python删除列表中重复记录的方法
2015/04/28 Python
Python利用turtle库绘制彩虹代码示例
2017/12/20 Python
Python实现读取txt文件并转换为excel的方法示例
2018/05/17 Python
Python实现将Excel转换成为image的方法
2018/10/23 Python
Python使用requests提交HTTP表单的方法
2018/12/26 Python
python 实现返回一个列表中出现次数最多的元素方法
2019/06/11 Python
用Cython加速Python到“起飞”(推荐)
2019/08/01 Python
python异常处理try except过程解析
2020/02/03 Python
python实现小程序推送页面收录脚本
2020/04/20 Python
LTD Commodities:礼品,独特发现,家居装饰,家用器皿
2017/08/11 全球购物
BAILEY 44官网:美国制造的女性服装
2019/07/01 全球购物
会计专业大学生求职信范文
2014/01/28 职场文书
银行先进个人事迹材料
2014/05/11 职场文书
群众路线教育实践活动学习笔记内容
2014/11/06 职场文书
劳动仲裁代理词范文
2015/05/25 职场文书
详解JS WebSocket断开原因和心跳机制
2021/05/07 Javascript
python文本处理的方案(结巴分词并去除符号)
2021/05/26 Python