< 返回首页

标哥的笔记,是记录在日常学习技术和日常开发中那些年遇到过的坑!本站为新站,原"标哥的技术博客"中的文章会慢慢移到本站,欢迎收藏本站!
在使用本站过程中,有任何建议请联系标哥! 另,承接App开发、网站开发和微信小程序开发!欢迎联系我们


iOS客户端上传图片thinkphp后台接收

 作者:标哥    发布日期:2017-03-30 13:23    阅读量:2485次
 

今天做了一下thinkphp5+iOS端图片上传功能,刚开始做的时候遇到很多问题,一直以来都是搞网站上传图片,后台接收,这种比较好搞。今天尝试做的时候遇到很多问题,今天记录下来,防止以后再遇到同样的坑。

iOS客户端表单提交

首先是iOS客户端上传图片,调用的是Alamofire库的api,以表单形式提交:

标哥的笔记图片

而需要上传的图片的data是这样的:

let data = UIImageJPEGRepresentation(image, 0.5)

因为我们是以表单文件形式提交的图片, 那么后台就可以通过$_FILES接收到文件上传变量,是一个二维数组,第一维保存上传的文件的数组,第二维保存文件的属性,包括类型、大小等。要实现上传文件,必须修改权限为加入可写 chmod -R 777 目标目录

到此,客户端就完成了,接下来就是看服务器如何接收了!

后台thinkphp5接收

后台要告诉前端接收的名称叫什么,这里叫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