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
php下通过curl抓取yahoo boss 搜索结果的实现代码
Jun 10 PHP
php实现多张图片上传加水印技巧
Apr 18 PHP
PHP CURL 内存泄露问题解决方法
Feb 12 PHP
PHP多态代码实例
Jun 26 PHP
33道php常见面试题及答案
Jul 06 PHP
php简单日历函数
Oct 28 PHP
[原创]php token使用与验证示例【测试可用】
Aug 30 PHP
详解php语言最牛掰的Laravel框架
Nov 20 PHP
php实现支付宝当面付(扫码支付)功能
May 30 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
Feb 27 PHP
tp5框架前台无限极导航菜单类实现方法分析
Mar 29 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实现mysql封装类示例
2014/05/07 PHP
Yii2汉字转拼音类的实例代码
2017/04/18 PHP
PHP匿名函数(闭包函数)详解
2019/03/22 PHP
JQuery.ajax传递中文参数的解决方法 推荐
2011/03/28 Javascript
JS Map 和 List 的简单实现代码
2013/07/08 Javascript
JS动态调用方法名示例介绍
2013/12/18 Javascript
jQuery中事件对象e的事件冒泡用法示例介绍
2014/04/25 Javascript
javascript使用正则控制input输入框允许输入的值方法大全
2014/06/19 Javascript
node.js中的console.trace方法使用说明
2014/12/09 Javascript
再JavaScript的jQuery库中编写动画效果的指南
2015/08/13 Javascript
动态加载js、css的简单实现代码
2016/05/26 Javascript
javascript基础进阶_深入剖析执行环境及作用域链
2017/09/05 Javascript
Angular @HostBinding()和@HostListener()用法
2018/03/05 Javascript
vue中post请求以a=a&amp;b=b 的格式写遇到的问题
2018/04/27 Javascript
jQuery中将json数据显示到页面表格的方法
2018/05/27 jQuery
vue插件实现v-model功能
2018/09/10 Javascript
Element PageHeader页头的使用方法
2020/07/26 Javascript
[15:28]DOTA2 HEROS教学视频教你分分钟做大人-剧毒术士
2014/06/13 DOTA
[01:16:28]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第二场 2月23日
2021/03/11 DOTA
numpy.random.seed()的使用实例解析
2018/02/03 Python
用 Python 连接 MySQL 的几种方式详解
2018/04/04 Python
Python运行不显示DOS窗口的解决方法
2018/10/22 Python
python实现创建新列表和新字典,并使元素及键值对全部变成小写
2019/01/15 Python
对python中的装包与解包实例详解
2019/08/24 Python
Python手绘可视化工具cutecharts使用实例
2019/12/05 Python
在tensorflow实现直接读取网络的参数(weight and bias)的值
2020/06/24 Python
利用CSS3实现折角效果实例源码
2016/09/28 HTML / CSS
HTML5添加鼠标悬浮音响效果不使用FLASH
2014/04/23 HTML / CSS
美术毕业生求职信
2014/02/25 职场文书
端午节活动总结
2014/08/26 职场文书
乡镇党员干部群众路线对照检查材料思想汇报
2014/09/28 职场文书
个人工作作风整改措施思想汇报
2014/10/13 职场文书
运动会开幕式通讯稿
2015/07/18 职场文书
数据库的高级查询六:表连接查询:外连接(左外连接,右外连接,UNION关键字,连接中ON与WHERE的不同)
2021/04/05 MySQL
python中取整数的几种方法
2021/11/07 Python
深入理解go缓存库freecache的使用
2022/02/15 Golang