描述:app前端传参,有多个图片 和 多个参数,用thinkphp写个上传接口
两个函数
addReport() //把数据写入数据库,并返回json给前端
_upload() //循环读取图片,返回值是 图片的web访问地址列表
代码如下:
/**
* 上传测试接口(不需要任何参数)
* @param {string} addr:地址,longitude:经度,latitude:纬度
* @return {json} 成功返回图片路径及参数
*/
public function addReport()
{
$tmp = file_get_contents("php://input");
$arr = json_decode($tmp,true);
$picList = $this->_upload();//调用图片上传函数
if(!$picList){
$this->error('图片上传失败');
}
$i = 1;
foreach ($picList as $value) {
$key = 'pic'.$i;
$data[$key] = $value;
$i++;
}
$data['addr'] = $arr['addr']?$arr['addr']:I('addr');
$data['longitude'] = $arr['longitude']?$arr['longitude']:I('longitude');
$data['latitude'] = $arr['latitude']?$arr['latitude']:I('latitude');
if(M('Report')->add($data)){
$this->success($data,'成功');
}else{
$this->error('存储失败');
}
}
/**
* 多个图像上传
* @param {string} $type: 存储类型 report:投诉 ,avatar:头像,logo:厂家logo,ad:广告图片
* @return {array} $arr 图片web地址列表
*/
public function _upload($type = 'report'){
$config = array(
'maxSize' => 3145728,
'rootPath' => 'up/'.$type.'/',
'savePath' => '',
'saveName' => array('uniqid',''),
'exts' => array('jpg', 'gif', 'png', 'jpeg'),
'autoSub' => true,
'subName' => array('date','Ymd'),
);
$baseUrl = C('SITE_URL').'up/'.$type.'/';//例如:http://www.baidu.com/up/report/
$upload = new \Think\Upload($config);// 实例化上传类
// 上传文件
$info = $upload->upload();
$arr = array();
$i = 0;
if(!$info) {// 上传错误提示错误信息
$this->error($upload->getError());
}else{// 上传成功
foreach($info as $file){ //循环存储图片到服务器
$subUrl = $file['savepath'].$file['savename'];//例如:20140125/dfuosi203.jpg
$arr[$i++] = $baseUrl.$subUrl;
}
return $arr;
}
}
建议:自己用postman 测试上传接口,不要等着前端跟你联调,很浪费时间,本地测试的post及返回结果如下:
其他注意事项:
网站根目录下的 up目录及附属目录 是否已经创建好,可写权限是否已经开启(比如本案例,需要 up目录下创建 report 目录,并赋予可写权限,linux下,命令行里,直接进入到项目根目录,然后输入: chmod -R 777 up)