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