婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > Thinkphp5+plupload實(shí)現(xiàn)的圖片上傳功能示例【支持實(shí)時(shí)預(yù)覽】

Thinkphp5+plupload實(shí)現(xiàn)的圖片上傳功能示例【支持實(shí)時(shí)預(yù)覽】

熱門標(biāo)簽:地下城堡2圖九地圖標(biāo)注 阿里云400電話申請(qǐng)加工單 智能電話機(jī)器人排名前十名南京 九江外呼系統(tǒng) 西區(qū)企業(yè)怎么做地圖標(biāo)注入駐 保定crm外呼系統(tǒng)運(yùn)營(yíng)商 抖音有個(gè)地圖標(biāo)注是什么意思 七魚外呼系統(tǒng)停用嗎 海南人工外呼系統(tǒng)有效果嗎

本文實(shí)例講述了Thinkphp5+plupload實(shí)現(xiàn)支持實(shí)時(shí)預(yù)覽的圖片上傳功能。分享給大家供大家參考,具體如下:

今天和大家分享一個(gè)國(guó)外的圖片上傳插件,這個(gè)插件支持分片上傳大文件。其中著名的七牛云平臺(tái)的jssdk就使用了puupload插件,可見這個(gè)插件還是相當(dāng)牛叉的。

這個(gè)插件不僅僅支持圖片上傳,還支持大多數(shù)文件的上傳,例如視頻文件,音頻文件,word文件等等,而且大文件都采用分片上傳的機(jī)制。

Plupload有以下功能和特點(diǎn):

1、擁有多種上傳方式:HTML5、flash、silverlight以及傳統(tǒng)的input type=”file” />。Plupload會(huì)自動(dòng)偵測(cè)當(dāng)前的環(huán)境,選擇最合適的上傳方式,并且會(huì)優(yōu)先使用HTML5的方式。所以你完全不用去操心當(dāng)前的瀏覽器支持哪些上傳方式,Plupload會(huì)自動(dòng)為你選擇最合適的方式。

2、支持以拖拽的方式來選取要上傳的文件

3、支持在前端壓縮圖片,即在圖片文件還未上傳之前就對(duì)它進(jìn)行壓縮

4、可以直接讀取原生的文件數(shù)據(jù),這樣的好處就是例如可以在圖片文件還未上傳之前就能把它顯示在頁(yè)面上預(yù)覽

5、支持把大文件切割成小片進(jìn)行上傳,因?yàn)橛行g覽器對(duì)很大的文件比如幾G的一些文件無法上傳。

下面就介紹一個(gè)tp5整合plupload圖片上傳插件的小案例,希望給大家?guī)硪稽c(diǎn)小幫助。

一、案例目錄結(jié)構(gòu)

二、Index.php控制器方法

?php
namespace app\index\controller;
use think\Controller;
use think\Db;
class Index extends Controller{
  public function index(){
    $rootUrl = $this->request->root(true); //ROOT域名
    $rootUrl = explode('index.php',$rootUrl)[0];
    //模板資源變量分配
    foreach (config('TMPL_PARSE_STRING') as $key => $value) {
      $this->view->assign('_'.$key,$rootUrl.$value);
    }
    return $this->fetch();
  }
  //圖片上傳方法
  public function upload_images(){
    if($this->request->isPost()){
      //接收參數(shù)
      $images = $this->request->file('file');
      //計(jì)算md5和sha1散列值,TODO::作用避免文件重復(fù)上傳
      $md5 = $images->hash('md5');
      $sha1= $images->hash('sha1');
      //判斷圖片文件是否已經(jīng)上傳
      $img = Db::name('picture')->where(['md5'=>$md5,'sha1'=>$sha1])->find();//我這里是將圖片存入數(shù)據(jù)庫(kù),防止重復(fù)上傳
      if(!empty($img)){
        return json(['status'=>1,'msg'=>'上傳成功','data'=>['img_id'=>$img['id'],'img_url'=>$this->request->root(true).'/'.$img['path']]]);
      }else{
        // 移動(dòng)到框架應(yīng)用根目錄/public/uploads/picture/目錄下
        $imgPath = 'public' . DS . 'uploads' . DS . 'picture';
        $info = $images->move(ROOT_PATH . $imgPath);
        $path = 'public/uploads/picture/'.date('Ymd',time()).'/'.$info->getFilename();
        $data = [
          'path' => $path ,
          'md5' => $md5 ,
          'sha1' => $sha1 ,
          'status' => 1 ,
          'create_time' => time() ,
        ];
        if($img_id=Db::name('picture')->insertGetId($data)){
          return json(['status'=>1,'msg'=>'上傳成功','data'=>['img_id'=>$img_id,'img_url'=>$this->request->root(true).'/'.$path]]);
        }else{
          return json(['status'=>0,'msg'=>'寫入數(shù)據(jù)庫(kù)失敗']);
        }
      }
    }else{
      return ['status'=>0,'msg'=>'非法請(qǐng)求!'];
    }
  }
}

三、index.html頁(yè)面

!DOCTYPE html>
html lang="en">
head>
  meta charset="UTF-8">
  title>tp5+plupload圖片上傳/title>
/head>
body>
!-- production -->
!--script type="text/javascript" src="./plupload.full.min.js">/script>-->
!-- debug-->
script type="text/javascript" src="{$_plupload}/moxie.js">/script>
script type="text/javascript" src="{$_plupload}/plupload.dev.js">/script>
script type="text/javascript" src="{$_plupload}/jquery.min.js">/script>
style>
  ul{
    list-style:none;
  }
  #file-list {overflow: hidden;padding-left: initial;}
  #file-list li {
    width:160px;
    float: left;
    height:200px;
    position: relative;
    height: inherit;
    margin-bottom: inherit;
  }
  #file-list li a {
    width:150px;
    height:150px;
    text-align: center;
    display: flex;
    align-items: center;
    justify-content: center;
    margin:0 auto;
    border:1px solid #ccc;
    padding: 5px 5px 5px 5px;
  }
  .close{
    background-image: url("{$_plupload}/close.png");
    width: 30px;
    height: 30px;
    background-size: contain;
    position: absolute;
    right: 2%;
    top: 0;
  }
  #file-list li a img {max-width:100%;max-height: 100%;}
  .progress{
    position: absolute;
    background-color: rgba(4, 4, 4, 0.53);
    color: #fff;
    padding: 3px 3px 3px 3px;
    border-radius: 10%;
  }
/style>
input type="hidden" id="images_upload" name="images" value=""/>
div id="container">
  button class="btn btn-primary" type="button" id="pickfiles" style="height: 30px;line-height: 8px;">選擇圖片/button>
  button class="btn btn-primary" type="button" id="uploadfiles" style="display: none">開始上傳/button>
  ul id="file-list">
  /ul>
/div>
script type="text/javascript">
  //調(diào)用例子
  var uploader = new plupload.Uploader({
    runtimes : 'html5,flash,silverlight,html4',//上傳方式順序優(yōu)先級(jí)
    browse_button : 'pickfiles',//選擇圖片按鈕id
    container: document.getElementById('container'),//容器
    url : "{:url('Index/upload_images')}",//服務(wù)器接口地址
    flash_swf_url : "{$_plupload}/Moxie.swf",
    silverlight_xap_url : "{$_plupload}/Moxie.xap",
    multi_selection: true,//false為單圖上傳,true為多圖上傳
    filters : {
      max_file_size : '100mb',//限制文件上傳大小
      mime_types: [
        {title : "Image files", extensions : "jpg,gif,png"},//限制文件上傳格式
      ]
    },
    init: {
      //init事件發(fā)生后觸發(fā)
      PostInit: function() {
        //document.getElementById('filelist').innerHTML = '';
        document.getElementById('uploadfiles').onclick = function() {
          uploader.start();
          return false;
        };
      },
      FilesAdded: function(up, files) {//文件選擇之后的觸發(fā)的方法
        var len = len = files.length;
        for(var i = 0; ilen; i++){
          var file_name = files[i].name; //文件名
          var file_size = files[i].size;//文件大小
          //構(gòu)造html來更新UI
          //var html = 'li id="file-' + files[i].id +'">p class="file-name">' + file_name + '(' + plupload.formatSize(file_size) + ')' + '/p>p class="progress">/p>/li>';
          var html = 'li id="file-' + files[i].id +'">span class="close">/span>/li>';
          $(html).appendTo('#file-list');
          !function(i){
            previewImage(files[i],function(imgsrc){
              $('#file-'+files[i].id).append('a>img src="'+ imgsrc +'" />span class="progress">12/span>/a>');
            })
          }(i);
          $("#uploadfiles").trigger('click');
        }
        /*plupload.each(files, function(file) {
         document.getElementById('filelist').innerHTML += 'div id="' + file.id + '">' + file.name + ' (' + plupload.formatSize(file.size) + ') b>/b>/div>';
         });*/
      },
      UploadProgress: function(up, file) {//上傳過程中調(diào)用的方法
        //document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = 'span>' + file.percent + "%/span>";
        $('#file-'+file.id +" .progress").html(file.percent + "%");
      },
      FileUploaded : function (up,file,res) {//文件上傳完成后
        console.log(res.response);
        var data = JSON.parse(res.response).data;
        $('#file-'+file.id).children('.close').attr('img_id',data.img_id);
        var img = $("#images_upload");
        var str = img.val();
        if(str == ''){
          str = data.img_id;
        }else{
          str += ','+data.img_id;
        }
        img.val(str);
      },
      Error: function(up, err) {
        //document.getElementById('console').appendChild(document.createTextNode("\nError #" + err.code + ": " + err.message));
      }
    }
  });
  //plupload中為我們提供了mOxie對(duì)象
  //有關(guān)mOxie的介紹和說明請(qǐng)看:https://github.com/moxiecode/moxie/wiki/API
  //file為plupload事件監(jiān)聽函數(shù)參數(shù)中的file對(duì)象,callback為預(yù)覽圖片準(zhǔn)備完成的回調(diào)函數(shù)
  function previewImage(file,callback){
    if(!file || !/image\//.test(file.type)) return; //確保文件是圖片
    if(file.type=='image/gif'){ //gif使用FileReader進(jìn)行預(yù)覽,因?yàn)閙Oxie.Image只支持jpg和png
      var gif = new moxie.file.FileReader();
      gif.onload = function(){
        callback(gif.result);
        gif.destroy();
        gif = null;
      };
      gif.readAsDataURL(file.getSource());
    }else{
      var image = new moxie.image.Image();
      image.onload = function() {
        image.downsize( 150, 150 );//先壓縮一下要預(yù)覽的圖片,寬300,高300
        var imgsrc = image.type=='image/jpeg' ? image.getAsDataURL('image/jpeg',80) : image.getAsDataURL(); //得到圖片src,實(shí)質(zhì)為一個(gè)base64編碼的數(shù)據(jù)
        callback  callback(imgsrc); //callback傳入的參數(shù)為預(yù)覽圖片的url
        image.destroy();
        image = null;
      };
      image.load( file.getSource() );
    }
  }
  uploader.init();
  //移除圖片
  $("#file-list").on('click',".close",function(){
    var img_id = $(this).attr("img_id");
    var img = $("#images_upload");
    var items=img.val().split(",");
    var index = items.indexOf(img_id);
    items.splice(index,1);//刪除元素
    img.val(items.join(','));
    $(this).parent().remove();
  });
/script>
/body>
/html>

  

如果想研究插件源碼的朋友,可以看這個(gè)文件,其中大部分都已經(jīng)注釋了。

最終效果就是這樣了。

 

如果對(duì)tp5不太熟悉的朋友,建議直接配置虛擬域名,將項(xiàng)目目錄綁定到/tp5/public/目錄。

案例源碼:https://github.com/BlueSimle/thinkphp5-plupload  (如果對(duì)你有幫助,請(qǐng)給個(gè)star哦。如果有什么疑問,請(qǐng)留言)

更多關(guān)于thinkPHP相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《ThinkPHP入門教程》、《thinkPHP模板操作技巧總結(jié)》、《ThinkPHP常用方法總結(jié)》、《codeigniter入門教程》、《CI(CodeIgniter)框架進(jìn)階教程》、《Zend FrameWork框架入門教程》及《PHP模板技術(shù)總結(jié)》。

希望本文所述對(duì)大家基于ThinkPHP框架的PHP程序設(shè)計(jì)有所幫助。

您可能感興趣的文章:
  • TP5框架實(shí)現(xiàn)上傳多張圖片的方法分析
  • tp5框架基于ajax實(shí)現(xiàn)異步刪除圖片的方法示例
  • tp5實(shí)現(xiàn)微信小程序多圖片上傳到服務(wù)器功能
  • 基于ThinkPHP5.0實(shí)現(xiàn)圖片上傳插件
  • ThinkPHP5+Layui實(shí)現(xiàn)圖片上傳加預(yù)覽功能
  • ThinkPHP5.0 圖片上傳生成縮略圖實(shí)例代碼說明
  • thinkPHP5框架整合plupload實(shí)現(xiàn)圖片批量上傳功能的方法
  • thinkphp5上傳圖片及生成縮略圖公共方法(分享)
  • thinkPHP5.0框架驗(yàn)證碼調(diào)用及點(diǎn)擊圖片刷新簡(jiǎn)單實(shí)現(xiàn)方法
  • Thinkphp5框架實(shí)現(xiàn)圖片、音頻和視頻文件的上傳功能詳解
  • ThinkPHP5+UEditor圖片上傳到阿里云對(duì)象存儲(chǔ)OSS功能示例
  • TP5框架實(shí)現(xiàn)一次選擇多張圖片并預(yù)覽的方法示例

標(biāo)簽:十堰 韶關(guān) 甘肅 梅河口 涼山 昭通 九江 遼陽(yáng)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Thinkphp5+plupload實(shí)現(xiàn)的圖片上傳功能示例【支持實(shí)時(shí)預(yù)覽】》,本文關(guān)鍵詞  Thinkphp5+plupload,實(shí)現(xiàn),的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Thinkphp5+plupload實(shí)現(xiàn)的圖片上傳功能示例【支持實(shí)時(shí)預(yù)覽】》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Thinkphp5+plupload實(shí)現(xiàn)的圖片上傳功能示例【支持實(shí)時(shí)預(yù)覽】的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    欧美日韩一二三区| 欧美成人免费网站| 欧美性xxxxx极品少妇| 国产日韩欧美电影| 久久99九九99精品| 精品国产污污免费网站入口 | 欧美伦理影视网| 亚洲国产日韩一级| 99精品国产99久久久久久白柏 | 久久草av在线| 精品免费视频一区二区| 国产高清成人在线| 精品日韩在线观看| 亚洲一区在线观看免费 | 成人动漫一区二区在线| 亚洲欧美日韩中文播放| 成人在线视频首页| 亚洲最快最全在线视频| 99精品欧美一区二区三区小说| 一区二区三区免费网站| 欧美性猛片aaaaaaa做受| 香蕉成人啪国产精品视频综合网 | 亚洲一区二区在线视频| 91精品国产手机| 成人午夜视频免费看| 伊人一区二区三区| 欧美不卡激情三级在线观看| 91麻豆.com| 中文字幕一区二区5566日韩| 在线播放91灌醉迷j高跟美女| 国产精品996| 麻豆国产欧美日韩综合精品二区| 91麻豆国产自产在线观看| 中文字幕亚洲在| 国产精品私人影院| 精品国产三级a在线观看| 欧美区一区二区三区| 成人激情开心网| 国产在线视频不卡二| 日韩av午夜在线观看| 自拍偷自拍亚洲精品播放| 日韩久久精品一区| 成人手机在线视频| 成人app下载| 色琪琪一区二区三区亚洲区| 国产成人精品免费在线| 精品无人区卡一卡二卡三乱码免费卡| 亚洲天堂中文字幕| 亚洲一区二区四区蜜桃| 天堂va蜜桃一区二区三区| 午夜精品久久久久久久99樱桃 | 欧美顶级少妇做爰| 4438x亚洲最大成人网| 欧美大片免费久久精品三p| 日韩你懂的电影在线观看| 日韩欧美国产午夜精品| 亚洲国产成人午夜在线一区| 亚洲男人的天堂在线aⅴ视频| 最新高清无码专区| 亚洲一二三级电影| 国产亚洲欧美日韩在线一区| 91麻豆福利精品推荐| 日韩欧美你懂的| 欧美激情资源网| 亚洲欧美激情小说另类| 久久精品人人做| 一区二区三区中文字幕在线观看| 亚洲欧洲国产日韩| 午夜激情久久久| 国产精品亚洲一区二区三区在线| 国产一区免费电影| 91在线观看成人| 中文字幕精品一区二区精品绿巨人 | 欧美日韩一区二区三区视频| 欧美日韩一级二级| 欧美极品美女视频| 亚洲另类在线视频| 亚洲欧美综合网| 综合亚洲深深色噜噜狠狠网站| 亚洲欧美经典视频| 天天av天天翘天天综合网 | 精品粉嫩超白一线天av| 亚洲精品久久嫩草网站秘色| 一区二区三区免费看视频| 免费观看一级欧美片| 精品一区二区精品| 色婷婷av一区二区三区gif| 91豆麻精品91久久久久久| 欧美电影免费提供在线观看| 国产精品久久久久久久久果冻传媒| 亚洲成人免费视频| 日本黄色一区二区| 中文字幕精品一区二区精品绿巨人| 亚洲不卡一区二区三区| 亚洲风情在线资源站| 久久99在线观看| 欧美一区二区在线免费播放| 国产精品国产三级国产普通话三级| 精品久久久久久久一区二区蜜臀| 懂色av一区二区三区蜜臀| 欧美视频日韩视频在线观看| 日本中文字幕一区二区视频| 欧美成人性福生活免费看| 午夜精品一区二区三区免费视频| 丁香婷婷综合色啪| 中文字幕不卡一区| 成人性生交大合| 国产喷白浆一区二区三区| 日韩专区一卡二卡| 欧美色网一区二区| 亚洲精品va在线观看| 精品婷婷伊人一区三区三| 午夜激情久久久| 欧美精品一区二区精品网| 国产麻豆精品在线观看| 中文字幕一区二区在线播放 | 岛国一区二区三区| 亚洲男同1069视频| 欧美特级限制片免费在线观看| 亚洲h在线观看| 久久久精品日韩欧美| 在线观看亚洲精品| 国产色婷婷亚洲99精品小说| 国产精品一线二线三线| 亚洲视频在线观看一区| 51久久夜色精品国产麻豆| 国产电影精品久久禁18| 亚洲一区在线观看免费| xf在线a精品一区二区视频网站| 99视频国产精品| 天天av天天翘天天综合网| 久久精品欧美日韩| 9色porny自拍视频一区二区| 国产一区中文字幕| 精品一区二区影视| 久久国产精品第一页| 日韩在线播放一区二区| 精品久久人人做人人爽| 亚洲国产另类精品专区| 国产清纯白嫩初高生在线观看91 | 综合欧美亚洲日本| 国产欧美一区二区精品性色超碰| 欧美日韩高清一区二区不卡| 午夜精品一区二区三区免费视频| 日本一区二区三区电影| 久久久久国产精品厨房| 久久久噜噜噜久久中文字幕色伊伊| 日韩视频不卡中文| 久久综合九色综合久久久精品综合| 日韩欧美另类在线| 欧美日韩一区在线| 3d成人h动漫网站入口| 日韩欧美电影一二三| 欧美大胆一级视频| 综合激情网...| 日韩av中文字幕一区二区| 久久99精品国产麻豆不卡| 免费在线看成人av| 不卡av电影在线播放| 国产精品一区二区在线观看不卡| 国产成人精品免费在线| 欧美日本精品一区二区三区| 日韩视频免费观看高清完整版在线观看| 日韩视频免费直播| 亚洲欧美区自拍先锋| 美国三级日本三级久久99| 韩国一区二区视频| 色噜噜夜夜夜综合网| 欧美一级黄色录像| 久久久久久久久一| 午夜精品爽啪视频| 不卡一二三区首页| 成人欧美一区二区三区小说| 日本亚洲最大的色成网站www| www.一区二区| 欧美国产精品专区| 国产一区二区精品在线观看| 日韩专区在线视频| 91麻豆.com| 亚洲日本中文字幕区| 国产黑丝在线一区二区三区| 成人av网站在线| 国产精品素人一区二区| 亚洲精品欧美在线| 福利一区二区在线观看| 日韩一区二区三区观看| 午夜久久电影网| 欧美日本一区二区在线观看| 一区二区三区在线观看网站| 国产激情视频一区二区在线观看 | 日本道精品一区二区三区| 日韩毛片高清在线播放| 97精品国产97久久久久久久久久久久 | 91丨porny丨户外露出| www国产精品av| 日韩电影在线免费观看| 欧美色图12p| 国内成人自拍视频| 久久免费看少妇高潮| av在线这里只有精品|