美文网首页
Android单图片上传,多图片上传(ThinkPhp接收)

Android单图片上传,多图片上传(ThinkPhp接收)

作者: V1tas | 来源:发表于2017-02-16 16:03 被阅读0次

    之前曾经写过一个php接收图片的文章,但是感觉很乱,不规律。最近看了ThinkPhp框架,ThinkPhp的MVC结构十分清晰,其中还封装了文件上传类,数据库相关东西,十分好用。于是在毕设中决定采用ThinkPhp来写接口。

    一、单文件上传。

    • 客户端代码基本一致,只修改了服务端,采用了ThinkPhp接收。

      //客户端的key为user_head
      if ($_FILES['user_head']['error'] === 0) {
             // 这是thinkPhp中Upload.class.php中的一些参数配置,其中都有注释,根据自己需求自己配置。
             $cfg = array(
                 'rootPath' => './Public/user_head/',                            //保存根路径
                 'autoSub' => false,                                                           //自动子目录保存文件
                 'saveName' => $_FILES['user_head']['name'],           //文件名
                 'saveExt' => 'jpg'                      //文件保存后缀,空则使用原后缀
             );
             // 设置附件的存储位置
             $upload = new Upload($cfg);
             // 上传文件
             $z = $upload->uploadOne($_FILES['user_head']);
             if (! $z) { // 上传错误提示错误信息
                 echo $this->error($upload->getError());
             }
             // 图片路径
             $img_url = "IP地址" . $upload->rootPath . $z['savename'];
             //后续可以将url存入数据库
      

    二、多文件上传

    多文件上传采用循环遍历,唯一不同的是客户端采用“一key多value”上传。
    客户端的key为"images[]";(上传两张图片)
    服务端接收 $files = $_FILES['images'];
    通过var_dump打印结果发现为

                                                                    array(5) {
                                                                     ["name"]=>
                                                                     array(2) {
                                                                       [0]=>
                                                                       string(31) "com_eg_android_AlipayGphone.png"
                                                                       [1]=>
                                                                       string(20) "com_student_aynu.png"
                                                                     }
                                                                     ["type"]=>
                                                                     array(2) {
                                                                       [0]=>
                                                                       string(9) "image/png"
                                                                       [1]=>
                                                                       string(9) "image/png"
                                                                     }
                                                                     ["tmp_name"]=>
                                                                     array(2) {
                                                                       [0]=>
                                                                       string(24) "C:\xampp\tmp\phpB784.tmp"
                                                                       [1]=>
                                                                       string(24) "C:\xampp\tmp\phpB785.tmp"
                                                                     }
                                                                     ["error"]=>
                                                                     array(2) {
                                                                       [0]=>
                                                                       int(0)
                                                                       [1]=>
                                                                       int(0)
                                                                     }
                                                                     ["size"]=>
                                                                     array(2) {
                                                                       [0]=>
                                                                       int(6584)
                                                                       [1]=>
                                                                       int(34205)
                                                                     }
                                                                   }
    

    这并不是我们想要的格式
    我们想要的格式为:

    Array
    (
    [0] => Array
        (
            [name] => com_eg_android_AlipayGphone.png
            [type] => image/png
            [tmp_name] => C:\xampp\tmp\phpB784.tmp
            [error] => 0
            [size] => 6584
        )
    
    [1] => Array
        (
            [name] => com_student_aynu.png
            [type] => image/png
            [tmp_name] => C:\xampp\tmp\phpB785.tmp
            [error] => 0
            [size] => 34205
        )
    )
    

    其中需要转化一下,转换的代码为(key,value 换一下)

    function reArrayFiles($file_post)
    {
        $file_ary = array();
        $file_count = count($file_post['name']);
        $file_keys = array_keys($file_post);
        
        for ($i = 0; $i < $file_count; $i ++) {
            foreach ($file_keys as $key) {
                $file_ary[$i][$key] = $file_post[$key][$i];
            }
        }
        return $file_ary;
    }
    

    后面循环上传就可以了。

    上传成功 保存入库

    相关文章

      网友评论

          本文标题:Android单图片上传,多图片上传(ThinkPhp接收)

          本文链接:https://www.haomeiwen.com/subject/qflhwttx.html