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 相关文章推荐
一个用于mysql的数据库抽象层函数库
Oct 09 PHP
php fsockopen中多线程问题的解决办法[翻译]
Nov 09 PHP
PHP执行批量mysql语句的解决方法
May 02 PHP
PHP计数器的实现代码
Jun 08 PHP
php实现统计邮件大小的方法
Aug 06 PHP
php用header函数实现301跳转代码实例
Nov 25 PHP
Mac OS下配置PHP+MySql环境
Feb 25 PHP
PHP加密解密类实例分析
Apr 20 PHP
php对数组内元素进行随机调换的方法
May 12 PHP
PHP实现事件机制的方法
Jul 10 PHP
PHP7新功能总结
Apr 14 PHP
PHP7 新增功能
Mar 09 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 实例化类的一点摘记
2008/03/23 PHP
zend framework文件上传功能实例代码
2013/12/25 PHP
跟我学Laravel之配置Laravel
2014/10/15 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
2016/03/07 PHP
PHP数组实例详解
2016/06/26 PHP
解决AJAX中跨域访问出现'没有权限'的错误
2008/08/20 Javascript
谷歌浏览器 insertCell与appendChild的区别
2009/02/12 Javascript
JavaScript 常用函数库详解
2009/10/21 Javascript
基于jQuery的让非HTML5浏览器支持placeholder属性的代码
2011/05/24 Javascript
js中prototype用法详细介绍
2013/11/14 Javascript
验证控件与Button的OnClientClick事件详细解析
2013/12/04 Javascript
jquery简单实现鼠标经过导航条改变背景图
2013/12/17 Javascript
浅析jQuery中调用ajax方法时在不同浏览器中遇到的问题
2014/06/11 Javascript
JS实现网页上随机产生超链接地址的方法
2015/11/09 Javascript
Vuejs第十三篇之组件——杂项
2016/09/09 Javascript
Javascript实现购物车功能的详细代码
2018/05/08 Javascript
vue.js 中使用(...)运算符报错的解决方法
2018/08/09 Javascript
vue elementUI table 自定义表头和行合并的实例代码
2019/05/22 Javascript
在Layui中实现开关按钮的效果实例
2019/09/29 Javascript
给Python IDLE加上自动补全和历史功能
2014/11/30 Python
Python 功能和特点(新手必学)
2015/12/30 Python
对Python3 * 和 ** 运算符详解
2019/02/16 Python
解决pycharm最左侧Tool Buttons显示不全的问题
2019/12/17 Python
Python3常见函数range()用法详解
2019/12/30 Python
Python PyPDF2模块安装使用解析
2020/01/19 Python
Python Merge函数原理及用法解析
2020/09/16 Python
基于django和dropzone.js实现上传文件
2020/11/24 Python
浅析python实现动态规划背包问题
2020/12/31 Python
日本最佳原创设计品牌:Felissimo(芬理希梦)
2019/03/19 全球购物
ManoMano英国:欧洲第一家专注于DIY和园艺市场的电商平台
2020/03/12 全球购物
教师个人剖析材料
2014/02/05 职场文书
亚运会口号
2014/06/20 职场文书
毕业典礼邀请函
2015/01/31 职场文书
努力工作保证书
2015/02/28 职场文书
创业计划之特色精品店
2019/08/12 职场文书
Pytorch 实现变量类型转换
2021/05/17 Python