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

之前曾经写过一个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接收)_第1张图片
上传成功
保存入库

你可能感兴趣的:(Android单图片上传,多图片上传(ThinkPhp接收))