• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > Thinkphp5如何实现图片、音频和视频文件的上传功能

Thinkphp5如何实现图片、音频和视频文件的上传功能

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了Thinkphp5如何实现上传功能,图片上传,音频上传,视频文件上传功能等相关知识,希望对您有所帮助

下面给大家介绍Thinkphp5实现图片、音频和视频文件的上传功能方法,希望对需要的朋友有所帮助!


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

如下前端代码

<!DOCTYPE html><html><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><head>  <meta charset="UTF-8">  <title>上传文件</title></head><body>  <form action="uploads1a" id="myform">    <input type="file" name="image" id="file" />  </form>  <p id="test"></p>  <button id="btn">点击上传</button>  <p>    <img src="" id="see">  </p>  <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 (res<0) {      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);}

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

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


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Thinkphp5如何实现图片、音频和视频文件的上传功能

相关文章

  • 2022-04-29uniapp中怎么实现直播旁路推流(步骤分享)
  • 2022-04-29Photoshop制作超酷的树藤装饰立体字教程
  • 2022-04-29详解Node.js Buffer的使用
  • 2022-04-29PhotoShop图层样式制作透明质感玻璃文字效果教程
  • 2022-04-29最新消息!WordPress 5.8开始将不再支持IE11浏览器
  • 2022-04-29Photoshop设计粉色金属质感的字体教程
  • 2022-04-29Phpcms V9广告位循环数据调用方法详解
  • 2022-04-29WordPress教程:WordPress博客添加自定义鼠标样式
  • 2022-04-29PhotoShop制作漂亮的渐变星光文字效果教程
  • 2022-04-29设置一个无需输入密码的WordPress登录表单

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • Thinkphp6微信PC端登录和手机端登录逻辑分享
    • dedecms织梦图集上传图片自动获取图片名做注释
    • 微信小程序wx.request使用POST请求时后端无法获取数据解决办法
    • 带大家聊聊小程序中的几种页面传参方式
    • Photoshop设计金属立体效果的APP图标
    • WordPress url链接去掉category的方法插件即可搞定
    • 浅谈css grid比Bootstrap更适合创建布局的原因
    • PHP以正则表达式验证手机号码
    • Photoshop设计碳纤维风格图标教程
    • PHP中require是什么意思

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有