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 相关文章推荐
简单介绍下 PHP5 中引入的 MYSQLI的用途
Mar 19 PHP
WindowsXP中快速配置Apache+PHP5+Mysql
Jun 05 PHP
php session应用实例 登录验证
Mar 16 PHP
php 判断访客是否为搜索引擎蜘蛛的函数代码
Jul 29 PHP
PHP开发工具ZendStudio下Xdebug工具使用说明详解
Nov 11 PHP
Win7 64位系统下PHP连接Oracle数据库
Aug 20 PHP
yii权限控制的方法(三种方法)
Dec 28 PHP
PHP简单字符串过滤方法示例
Sep 04 PHP
PHP GD库相关图像生成和处理函数小结
Sep 30 PHP
微信接口生成带参数的二维码
Jul 31 PHP
实例解析php的数据类型
Oct 24 PHP
使用Git实现Laravel项目的自动化部署
Nov 24 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 编写大型网站问题集
2010/05/07 PHP
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
2011/09/11 PHP
用mysql_fetch_array()获取当前行数据的方法详解
2013/06/05 PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
2013/06/25 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
redis+php实现微博(二)发布与关注功能详解
2019/09/23 PHP
纯js实现背景图片切换效果代码
2010/11/14 Javascript
关于js注册事件的常用方法
2013/04/03 Javascript
浅谈关于JavaScript的语言特性分析
2013/04/11 Javascript
JavaScript中的函数声明和函数表达式区别浅析
2015/03/27 Javascript
jQuery+C#实现参数RSA加密传输功能【附jsencrypt.js下载】
2017/06/26 jQuery
ReactNative列表ListView的用法
2017/08/02 Javascript
vue params、query传参使用详解
2017/09/12 Javascript
Angular PWA使用的Demo示例
2019/01/31 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
微信小程序事件流原理解析
2019/11/27 Javascript
2019年度web前端面试题总结(主要为Vue面试题)
2020/01/12 Javascript
Vue 中 template 有且只能一个 root的原因解析(源码分析)
2020/04/11 Javascript
[01:18]PWL开团时刻DAY4——圣剑与抢盾
2020/11/03 DOTA
python实现根据图标提取分类应用程序实例
2014/09/28 Python
Python中单例模式总结
2018/02/20 Python
TensorFlow实现随机训练和批量训练的方法
2018/04/28 Python
Pycharm设置去除显示的波浪线方法
2018/10/28 Python
Python使用pyautocad+openpyxl处理cad文件示例
2019/07/11 Python
安装python及pycharm的教程图解
2019/10/10 Python
python 基于opencv实现高斯平滑
2020/12/18 Python
Beauty Expert美国/加拿大:购买奢侈美容产品
2018/12/05 全球购物
网络工程师面试(三木通信技术有限公司)
2013/06/05 面试题
五十岁生日宴会答谢词
2014/01/15 职场文书
市场营销专业大学生职业生涯规划文
2014/03/06 职场文书
诉讼代理人授权委托书
2014/04/08 职场文书
乡镇干部个人整改措施思想汇报
2014/10/10 职场文书
2014年学校办公室工作总结
2014/12/19 职场文书
起诉书格式范文
2015/05/20 职场文书
2016七夕情人节寄语
2015/12/04 职场文书
python基础之函数的定义和调用
2021/10/24 Python