本文实例讲述了PHP接收App端发送文件流的方法。分享给大家供大家参考,具体如下:
解决思路:
1. 客户端多张图片进行循环上传,同时附带参数,并用一定规则组合生产数据流(图片数据放在最后) 2. 使用数据流进行传输,PHP服务端用file_get_content('PHP://input')进行接收 3. 传输完毕后将数据流按照规则分割,取出最后的图片数据,并写入图片文件
示例代码:
以下代码是发送单张图片和参数PHP文件,多张图片可循环调用。
PHP;">
$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);
PHP;">
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程序设计有所帮助。