• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Thinkphp5框架实现图片、音频和视频文件的上传功能详解

    本文实例讲述了Thinkphp5框架实现图片、音频和视频文件的上传功能。分享给大家供大家参考,具体如下:

    首先是同步上传,最为基础的上传的方式,点击表单提交之后跳转那种。如下前端代码

    !DOCTYPE html>
    html lang="en">
    head>
      meta charset="UTF-8">
      title>上传文件/title>
    /head>
    body>
      form action="upload" enctype="multipart/form-data" method="post">
        input type="file" name="image" />
        br>
        input type="submit" value="上传" />
      /form>
    /body>
    /html>
    
    

    注意这里的enctype必须enctype="multipart/form-data",方案必须是post。后端代码直接拿tp5的官网示例代码吧:

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

    后面发现自己做的好简单,于是改进了前端代码,并且前端代码实现了文件类型校验,将同步改为ajax异步提交,同时改为formdata提交文件数据,后台代码没有太大变化,返回了提交文件的链接,而前端预览只能预览图片。改过之后的前端代码为

    !DOCTYPE html>
    html lang="en">
    head>
      meta charset="UTF-8">
      title>上传文件/title>
    /head>
    body>
      form action="uploads1a" id="myform">
        input type="file" name="image" id="file" />
      /form>
      div id="test">/div>
      button id="btn">点击上传/button>
      div>
        img src="" id="see">
      /div>
      script type="text/javascript">
      var btn = document.getElementById("btn");
      var file=document.getElementById("file");
      var promise=["png","jpg","jpeg","gif","mp3","mp4","svg"];
      file.onchange=function(){
        var name=file.value;
        var ext=name.substring(name.lastIndexOf(".") + 1).toLowerCase();
        var res=promise.indexOf(ext);
        if (res0) {
          alert("文件格式不正确");
          document.getElementById("btn").disabled=true;
        }else{
          document.getElementById("btn").disabled=false;
        }
      }
      btn.onclick = function() {
        var val=document.getElementById("file").value;
        if (val.length==0) {
          return;
        }
        var fromData = new FormData(document.forms[0]);
        fromData.append("test", "formdata");
        var oAjax = new XMLHttpRequest();
        oAjax.open('post', "uploadAjax", true);
        oAjax.send(fromData);
        oAjax.onreadystatechange = function() {
          if (oAjax.readyState == 4) {
            if (oAjax.status >= 200  oAjax.status  300 || oAjax.status == 304) {
              console.log(oAjax.responseText);
              var data=JSON.parse(oAjax.responseText);
              document.getElementById("see").setAttribute("src","/thinkphp"+data.src);
              document.getElementById("file").value="";
            } else {
              console.log(oAjax.status);
            }
          }
        };
      }
      /script>
    /body>
    /html>
    
    

    后端代码改进了一下

    public function uploadAjax(){
        // 获取表单上传文件 例如上传了001.jpg
      $file = request()->file('image');
      $test=request()->post("test");
      $src=[];//返回文件路径
      // 移动到框架应用根目录/public/uploads/ 目录下
      if($file){
        $info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');
        if($info){
          // 成功上传后 获取上传信息
          // 输出 jpg
           $info->getExtension();
          // 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
           $info->getSaveName();
          // 输出 42a79759f284b767dfcb2a0197904287.jpg
           $info->getFilename();
           $src["src"]=DS.'public'.DS.'uploads'.DS.$info->getSaveName();
        }else{
          // 上传失败获取错误信息
           $file->getError();
        }
      };
        return json_encode($src);
      }
    
    

    细节方面,比如上传之后报错返回信息没有做处理。

    整体实现就是这样,作为一个常用的业务场景,这个本身还有很多改进的余地,比如删除已经上传的文件或者校验文件是否已经上传,如果上传不能二次上传或者删除掉前面上传的。当然如果文件名称不做处理而是原名称上传,则上传之后会覆盖原文件。

    更多关于thinkPHP相关内容感兴趣的读者可查看本站专题:《ThinkPHP入门教程》、《thinkPHP模板操作技巧总结》、《ThinkPHP常用方法总结》、《codeigniter入门教程》、《CI(CodeIgniter)框架进阶教程》、《Zend FrameWork框架入门教程》及《PHP模板技术总结》。

    希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • TP5框架实现上传多张图片的方法分析
    • tp5框架基于ajax实现异步删除图片的方法示例
    • tp5实现微信小程序多图片上传到服务器功能
    • 基于ThinkPHP5.0实现图片上传插件
    • ThinkPHP5+Layui实现图片上传加预览功能
    • ThinkPHP5.0 图片上传生成缩略图实例代码说明
    • thinkPHP5框架整合plupload实现图片批量上传功能的方法
    • thinkphp5上传图片及生成缩略图公共方法(分享)
    • thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法
    • Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】
    • ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
    • TP5框架实现一次选择多张图片并预览的方法示例
    上一篇:Thinkphp5框架使用validate实现验证功能的方法
    下一篇:Thinkphp5框架ajax接口实现方法分析
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Thinkphp5框架实现图片、音频和视频文件的上传功能详解 Thinkphp5,框架,实现,图片,