zoukankan      html  css  js  c++  java
  • thinkphp5多文件上传如何实现

     

    thinkphp5多文件上传如何实现

    一、总结

    一句话总结:官方文档,测试一下,一定要测试,打印中间变量,就知道每句话是什么意思,一定要测试一下。又简单有快。

    测试一下,你就能确定中间变量和你的是不是一样,你是不是可以照着他的方法弄

    1、框架或者插件遇到不懂的语句而又一定要用怎么办?

    测试,打印中间变量,就比较轻松了

    2、单文件上传和多文件上传混合在一起的上传怎么解决?

    单文件上传和多文件上传混合在一起(循环解决),多文件上传部分单独处理(选择结构)

    照着手册整,可以省好多事

    不懂的语句打印中间结果

     1 //2、获取传入的文件数据
     2 foreach ($_FILES as $key=>$val){
     3     if($_FILES[$key]['tmp_name']){
     4         // 获取表单上传文件 例如上传了001.jpg
     5         $file = request()->file($key);
     6         if($key=='a_content_pic3'){//多图上传的情况
     7             //不用拆,官方文档有怎么用
     8             $files=$file;
     9             $data[$key]=null;
    10             foreach($files as $perFile){
    11                 // 移动到框架应用根目录/public/uploads/ 目录下
    12                 $info = $perFile->move(ROOT_PATH . 'public' . DS . 'static/uploads/student/note'."/{$jieduanStr}");
    13                 $data[$key].='/static/uploads/student/note/'."{$jieduanStr}/".$info->getSaveName().',';
    14             }
    15         }else{
    16             // 移动到框架应用根目录/public/uploads/ 目录下
    17             $info = $file->move(ROOT_PATH . 'public' . DS . 'static/uploads/student/note'."/{$jieduanStr}");
    18             // 已经上传成功,我们要把文件的路径写进数据库
    19             $data[$key]='/static/uploads/student/note/'."{$jieduanStr}/".$info->getSaveName();
    20         }
    21     }
    22 }

    二、thinkphp5多文件上传如何实现

    1、多文件上传代码

    如果你使用的是多文件上传表单,例如:

    <form action="/index/index/upload" enctype="multipart/form-data" method="post">
    <input type="file" name="image[]" /> <br> 
    <input type="file" name="image[]" /> <br> 
    <input type="file" name="image[]" /> <br> 
    <input type="submit" value="上传" /> 
    </form> 
    

    控制器代码可以改成:

    public function upload(){
        // 获取表单上传文件
        $files = request()->file('image');
        foreach($files as $file){
            // 移动到框架应用根目录/public/uploads/ 目录下
            $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');
            if($info){
                // 成功上传后 获取上传信息
                // 输出 jpg
                echo $info->getExtension(); 
                // 输出 42a79759f284b767dfcb2a0197904287.jpg
                echo $info->getFilename(); 
            }else{
                // 上传失败获取错误信息
                echo $file->getError();
            }    
        }
    }

    上传界面如下:

    2、上传过程中dump($_FILES);的值如下

    3、上传成功的返回信息如下

    其实也就是下面代码的输出结果

    echo $info->getExtension();
    echo "<br>";
    // 输出 42a79759f284b767dfcb2a0197904287.jpg
    echo $info->getFilename();
    echo "<br>";

     

    三、复杂结构数据的多文件上传

    1、上传过程中部分dump($_FILES);的值如下

    结构特点是单文件上传和多文件上传混合在一起(循环解决),多文件上传部分单独处理(选择结构)

    2、核心代码

     1 //2、获取传入的文件数据
     2 foreach ($_FILES as $key=>$val){
     3     if($_FILES[$key]['tmp_name']){
     4         // 获取表单上传文件 例如上传了001.jpg
     5         $file = request()->file($key);
     6         if($key=='a_content_pic3'){//多图上传的情况
     7             //不用拆,官方文档有怎么用
     8             $files=$file;
     9             $data[$key]=null;
    10             foreach($files as $perFile){
    11                 // 移动到框架应用根目录/public/uploads/ 目录下
    12                 $info = $perFile->move(ROOT_PATH . 'public' . DS . 'static/uploads/student/note'."/{$jieduanStr}");
    13                 $data[$key].='/static/uploads/student/note/'."{$jieduanStr}/".$info->getSaveName().',';
    14             }
    15         }else{
    16             // 移动到框架应用根目录/public/uploads/ 目录下
    17             $info = $file->move(ROOT_PATH . 'public' . DS . 'static/uploads/student/note'."/{$jieduanStr}");
    18             // 已经上传成功,我们要把文件的路径写进数据库
    19             $data[$key]='/static/uploads/student/note/'."{$jieduanStr}/".$info->getSaveName();
    20         }
    21     }
    22 }

    3、上传好了的结果数据

     1 array(11) {
     2   ["a_type"] => string(1) "2"
     3   ["a_title"] => string(5) "33333"
     4   ["a_brief"] => string(11) "33333333333"
     5   ["a_content_art1"] => string(0) ""
     6   ["a_create_time"] => int(1535563492)
     7   ["a_update_time"] => int(1535563492)
     8   ["a_authorid"] => string(2) "33"
     9   ["a_g_id"] => int(17)
    10   ["a_jieduan_id"] => string(1) "1"
    11   ["a_picture"] => string(81) "/static/uploads/student/note/engage/20180830dd2c9ae77b8c2c1f764d98ee86dcfb71.png"
    12   ["a_content_pic3"] => string(164) "/static/uploads/student/note/engage/20180830f972fe240bc0d315ae0e3f5fadd31486.jpg,/static/uploads/student/note/engage/2018083071646f316808c0cd057813086c76554c.jpg,"
    13 }
     
  • 相关阅读:
    python字符串操作
    python学习【一】基础入门
    markdown 编辑器
    jenkins学习笔记-安装
    算法
    python 修改文件内容
    python基础,python第四课
    python基础,python第三课
    python基础,python第二课
    python基础,python第一课
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9557836.html
Copyright © 2011-2022 走看看