今天做了一下thinkphp5+iOS端图片上传功能,刚开始做的时候遇到很多问题,一直以来都是搞网站上传图片,后台接收,这种比较好搞。今天尝试做的时候遇到很多问题,今天记录下来,防止以后再遇到同样的坑。
iOS客户端表单提交
首先是iOS客户端上传图片,调用的是Alamofire库的api,以表单形式提交:
而需要上传的图片的data是这样的:
letdata=UIImageJPEGRepresentation(image,0.5)
因为我们是以表单文件形式提交的图片, 那么后台就可以通过$_FILES接收到文件上传变量,是一个二维数组,第一维保存上传的文件的数组,第二维保存文件的属性,包括类型、大小等。要实现上传文件,必须修改权限为加入可写 chmod -R 777 目标目录
到此,客户端就完成了,接下来就是看服务器如何接收了!
后台thinkphp5接收
后台要告诉前端接收的名称叫什么,这里叫image,如果名称不对上,也拿不到的!
publicfunctionupload(){ $file=request()->file('image'); if(!$file){ returnjson(['success'=>'0','message'=>'图片接收不到']); } $info=$file->move(ROOT_PATH.'public'.DS.'uploads'); if($info){ $savename=$info->getSaveName(); $filename=$info->getFilename(); $data=[ 'filename'=>$filename, 'savename'=>$savename, ]; $id=db('resource')->insertGetId($data); if($id){ returnjson(['success'=>'1','message'=>'上传成功','pid'=>$id]); } } returnjson(['success'=>'0','message'=>'上传失败']); }
遇到的坑
iOS端上传图片的时候,这么写会让后台接收不到图片文件:
letfilename=String(Date().timeIntervalSince1970)+".jpeg" multipartFormData.append(data,withName:"image") //或者 multipartFormData.append(data,withName:"image",mimeType:"image/jpeg")
不传文件名称参数就不可以接收到了,不太明白原因!