温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2021-06-03 17:44:37 来源:亿速云 阅读:513 作者:Leah 栏目:编程语言

本篇文章为大家展示了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>   <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);   }

上述内容就是Thinkphp5实现图片、音频和视频文件的上传功能,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI