猿问

求前辈帮忙看下,从APP传来的多个图片上传PHP后台处理接口是否正确

    $file = $_FILES['equipImg'];  //得到传输的数据,以数组的形式
    //print_r($file);exit;
    $name = $file['name'];      //得到文件名称,以数组的形式
    $upload_path = "../data/app/equip/".date("Y/m/d/"); //上传文件的存放路径
    make_dir($upload_path);

    foreach ($name as $k=>$names){
        $type = strtolower(substr($names,strrpos($names,'.')+1));//得到文件类型,并且都转化成小写
        $allow_type = array('jpg','jpeg','gif','png','bmp'); //定义允许上传的类型
        //把非法格式的图片去除
        if (!in_array($type,$allow_type)){
            unset($name[$k]);
        }
    }
    $equipImg = '';
    foreach ($name as $k=>$item){
        $type = strtolower(substr($item,strrpos($item,'.')+1));//得到文件类型,并且都转化成小写
        $uploadname = time().mt_rand(100,999).".".$type;
        //$uploadname = time().$name[$k];
        if (move_uploaded_file($file['tmp_name'][$k],$upload_path.$uploadname)){
            $equipImg .= ','.date("Y/m/d/").$uploadname;
        }else{
            retrunJson(-1, '设备图上传失败');
        }
    }
    $equipImg = ltrim($equipImg, ",");
    
    最后将$equipImg插入到对应数据库的equipImg字段下(字段中为字符串形式,多个图片路径中间以逗号,来分隔)

在与app调试时候(比如安卓或者ios)发现有问题,接不到多个图片,但是如果我用php的方法去测试,比如
<input type="file" name="equipImg[]">
<input type="file" name="equipImg[]">
<input type="file" name="equipImg[]">

这种形式去测试这个多图上传,是没问题的,都正常
但是因为我不了解APP那边怎么做的,是不是和php的equipImg[]这种形式有区别,才导致问题的

(一次性多图提交,最多不超过5张图)

所以请有经验的大佬,能帮忙看下,我这边接app传来的多图是不是有问题,不胜感激

千巷猫影
浏览 385回答 3
3回答

繁星点点滴滴

存在的问题如下: 1.文件存储路径一般是绝对路径 ,不要写相对路径,路径配置成常量。2.你需要判断$_FILES[] 是否为空,并且图片数量不能大于5。3.每张图片的大小也没加限制,你这样会把存储服务器撑爆的。4.你每次都会去make_dir 一下,应该是先判断文件夹是否存在,如果不存在才会创建。5.另外你上的代码,毫无可读性,健壮性,毫无排版,更别提代码复用了,让我一看就没兴趣往下看了。

回首忆惘然

我认为需要弄清楚的是,APP端那边,是一次性批量多图提交,还是每张图循环提交上传。这是你要和APP开发那边对接清楚。

qq_花开花谢_0

是否有人能提供一下建议呢

叮当猫咪

不管APP是怎么传图的,一般就是post,具体传过来的数据,你打印出来看看,我看你那有print 为什么不把结果也贴出来
随时随地看视频慕课网APP
我要回答