Thinkphp拖拽上傳檔案-使用webuploader外掛(自己稍微改動了一些地方)——不切片上傳
在拖拽或選擇上傳會遇到上傳檔案大小限制問題——如果檔案很大,可以做切片,也可以不做切片,如果不做切片,檔案太大,可能會上傳失敗,因為“WAMP資料庫上傳檔案的大小及上傳時間會受限制”,可以進行一下操作:
檔案大小限制問題轉載連結:http://blog.csdn.net/lihuanliang765142602/article/details/29554063
“max_execution_time =" 數值改為 1200
“max_input_time = ” 數值改為 1200
“memory_limit = ” 數值改為 256
“post_max_size = ” 需要上傳多大的檔案將數值改為多大
“upload_max_filesize = ” 跟上面這個數值一樣就可以了
這樣設定應該可以確保檔案大小上傳沒有問題。
第二步,解決執行時間錯誤。“Maximum execution time of 300seconds”,這個問題要找到config.inc.php這個檔案,檔案路徑D:\wamp\apps\phpmyadmin2.11.6;相信能看懂。找到檔案後
總結程式碼轉載連結:http://baijunyao.com/article/80
html頁面: <!DOCTYPE html> <html class="js cssanimations"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Thinkphp拖拽上傳檔案-使用webuploader外掛</title> <include file="Inc/css" /> <link rel="stylesheet" href="__PUBLIC__/webuploader/xb-webuploader.css"> <script src="__PUBLIC__/js/jquery.min.js"></script> <script src="__PUBLIC__/webuploader/webuploader.min.js"></script> </head> <body> <div class="admin-content"> <form action="{:U('Mafull/webuploader')}" method="post" > <div id="upload-57c79f4938104" class="xb-uploader"> <input type="hidden" name="image" id="image"> <div class="queueList"> <div class="placeholder" style="padding: 20px"> <div class="filePicker"></div> </div> </div> <div class="statusBar" style="display:none;"> <div class="progress"> <span class="text">0%</span> <span class="percentage"></span> </div> <div class="info"></div> <!-- <div class="btns"> <div class="uploadBtn">開始上傳</div> </div>--> </div> </div> </div> </form> </div> <script> jQuery(function() { var $ = jQuery, // just in case. Make sure it's not an other libaray. $wrap = $("#upload-57c79f4938104"), // 圖片容器 $queue = $('<ul class="filelist"></ul>') .appendTo( $wrap.find('.queueList') ), // 狀態列,包括進度和控制按鈕 $statusBar = $wrap.find('.statusBar'), // 檔案總體選擇資訊。 $info = $statusBar.find('.info'), // 上傳按鈕 $upload = $wrap.find('.uploadBtn'), // 沒選擇檔案之前的內容。 $placeHolder = $wrap.find('.placeholder'), // 總體進度條 $progress = $statusBar.find('.progress').hide(), // 新增的檔案數量 fileCount = 0, // 新增的檔案總大小 fileSize = 0, // 優化retina, 在retina下這個值是2 ratio = window.devicePixelRatio || 1, // 縮圖大小 thumbnailWidth = 110 * ratio, thumbnailHeight = 110 * ratio, // 可能有pedding, ready, uploading, confirm, done. state = 'pedding', // 所有檔案的進度資訊,key為file id percentages = {}, supportTransition = (function(){ var s = document.createElement('p').style, r = 'transition' in s || 'WebkitTransition' in s || 'MozTransition' in s || 'msTransition' in s || 'OTransition' in s; s = null; return r; })(), // WebUploader例項 uploader; if ( !WebUploader.Uploader.support() ) { alert( 'Web Uploader 不支援您的瀏覽器!如果你使用的是IE瀏覽器,請嘗試升級 flash 播放器'); throw new Error( 'WebUploader does not support the browser you are using.' ); } // 例項化 uploader = WebUploader.create({ auto: true,// 選完檔案後,是否自動上傳。 pick: { id: "#upload-57c79f4938104 .filePicker", label: '點選選擇檔案', multiple : true }, dnd: "#upload-57c79f4938104 .queueList", paste: document.body, // accept: { //上傳檔案型別 // title: 'Images', // extensions: 'gif,jpg,jpeg,bmp,png', // mimeTypes: 'image/*' // }, // swf檔案路徑 swf: '__PUBLIC__/webuploader/Uploader.swf', disableGlobalDnd: true,// [可選] [預設值:false]是否禁掉整個頁面的拖拽功能,如果不禁用,圖片拖進來的時候會預設被瀏覽器 開啟。 //chunked: true,//分片處理大檔案 //chunkSize: 25 * 1024 * 1024, // 500 M server: "__URL__/ajax_upload", fileNumLimit: 1, fileSizeLimit: 500 * 1024 * 1024, // 500 M fileSingleSizeLimit: 500 * 1024 * 1024 // 500 M }); // 新增“新增檔案”的按鈕, // uploader.addButton({ // uploader.addButton({ // id: "#upload-57c79f4938104 .filePicker2", // label: '繼續新增' // }); // 當有檔案新增進來時執行,負責view的建立 function addFile( file ) { var $li = $( '<li id="' + file.id + '">' + '<p class="title">' + file.name + '</p>' + '<p class="imgWrap"></p>'+ '<p class="progress"><span></span></p>' + '</li>' ), $btns = $('<div class="file-panel">' + '<span class="cancel">刪除</span>' + '<span class="rotateRight">向右旋轉</span>' + '<span class="rotateLeft">向左旋轉</span></div>').appendTo( $li ), $prgress = $li.find('p.progress span'), $wrap = $li.find( 'p.imgWrap' ), $info = $('<p class="error"></p>'), showError = function( code ) { switch( code ) { case 'exceed_size': text = '檔案大小超出'; break; case 'interrupt': text = '上傳暫停'; break; default: text = '上傳失敗,請重試'; break; } $info.text( text ).appendTo( $li ); }; if ( file.getStatus() === 'invalid' ) { showError( file.statusText ); } else { // @todo lazyload $wrap.text( '預覽中' ); uploader.makeThumb( file, function( error, src ) { if ( error ) { $wrap.text( '不能預覽' ); return; } var img = $('<img src="'+src+'">'); $wrap.empty().append( img ); }, thumbnailWidth, thumbnailHeight ); percentages[ file.id ] = [ file.size, 0 ]; file.rotation = 0; } file.on('statuschange', function( cur, prev ) { if ( prev === 'progress' ) { $prgress.hide().width(0); } else if ( prev === 'queued' ) { $li.off( 'mouseenter mouseleave' ); $btns.remove(); } // 成功 if ( cur === 'error' || cur === 'invalid' ) { console.log( file.statusText ); showError( file.statusText ); percentages[ file.id ][ 1 ] = 1; } else if ( cur === 'interrupt' ) { showError( 'interrupt' ); } else if ( cur === 'queued' ) { percentages[ file.id ][ 1 ] = 0; } else if ( cur === 'progress' ) { $info.remove(); $prgress.css('display', 'block'); } else if ( cur === 'complete' ) { $li.append( '<span class="success"></span>' ); } $li.removeClass( 'state-' + prev ).addClass( 'state-' + cur ); }); $li.on( 'mouseenter', function() { $btns.stop().animate({height: 30}); }); $li.on( 'mouseleave', function() { $btns.stop().animate({height: 0}); }); $btns.on( 'click', 'span', function() { var index = $(this).index(), deg; switch ( index ) { case 0: uploader.removeFile( file ); return; case 1: file.rotation += 90; break; case 2: file.rotation -= 90; break; } if ( supportTransition ) { deg = 'rotate(' + file.rotation + 'deg)'; $wrap.css({ '-webkit-transform': deg, '-mos-transform': deg, '-o-transform': deg, 'transform': deg }); } else { $wrap.css( 'filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation='+ (~~((file.rotation/90)%4 + 4)%4) +')'); // use jquery animate to rotation // $({ // rotation: rotation // }).animate({ // rotation: file.rotation // }, { // easing: 'linear', // step: function( now ) { // now = now * Math.PI / 180; // var cos = Math.cos( now ), // sin = Math.sin( now ); // $wrap.css( 'filter', "progid:DXImageTransform.Microsoft.Matrix(M11=" + cos + ",M12=" + (-sin) + ",M21=" + sin + ",M22=" + cos + ",SizingMethod='auto expand')"); // } // }); } }); $li.appendTo( $queue ); } // 負責view的銷燬 function removeFile( file ) { var $li = $('#'+file.id); delete percentages[ file.id ]; updateTotalProgress(); $li.off().find('.file-panel').off().end().remove(); } function updateTotalProgress() { var loaded = 0, total = 0, spans = $progress.children(), percent; $.each( percentages, function( k, v ) { total += v[ 0 ]; loaded += v[ 0 ] * v[ 1 ]; } ); percent = total ? loaded / total : 0; spans.eq( 0 ).text( Math.round( percent * 100 ) + '%' ); spans.eq( 1 ).css( 'width', Math.round( percent * 100 ) + '%' ); updateStatus(); } function updateStatus() { var text = '', stats; if ( state === 'ready' ) { text = '選中' + fileCount + '個檔案,共' + WebUploader.formatSize( fileSize ) + '。'; } else if ( state === 'confirm' ) { stats = uploader.getStats(); if ( stats.uploadFailNum ) { text = '已成功上傳' + stats.successNum+ '個檔案,'+ stats.uploadFailNum + '個上傳失敗,<a class="retry" href="#">重新上傳</a>失敗檔案或<a class="ignore" href="#">忽略</a>' } } else { stats = uploader.getStats(); text = '共' + fileCount + '個(' + WebUploader.formatSize( fileSize ) + '),已上傳' + stats.successNum + '個'; if ( stats.uploadFailNum ) { text += ',失敗' + stats.uploadFailNum + '個'; } } $info.html( text ); } uploader.onUploadAccept=function(object ,ret){ if(ret.error_info){ fileError=ret.error_info; return false; } } uploader.onUploadSuccess=function(file ,response){ fileName=response.name; } uploader.onUploadError=function(file){ alert(fileError); } function setState( val ) { var file, stats; if ( val === state ) { return; } $upload.removeClass( 'state-' + state ); $upload.addClass( 'state-' + val ); state = val; switch ( state ) { case 'pedding': $placeHolder.removeClass( 'element-invisible' ); $queue.parent().removeClass('filled'); $queue.hide(); $statusBar.addClass( 'element-invisible' ); uploader.refresh(); break; case 'ready': $placeHolder.addClass( 'element-invisible' ); $( "#upload-57c79f4938104 .filePicker2" ).removeClass( 'element-invisible'); $queue.parent().addClass('filled'); $queue.show(); $statusBar.removeClass('element-invisible'); uploader.refresh(); break; case 'uploading': $( "#upload-57c79f4938104 .filePicker2" ).addClass( 'element-invisible' ); $progress.show(); $upload.text( '暫停上傳' ); break; case 'paused': $progress.show(); $upload.text( '繼續上傳' ); break; case 'confirm': $progress.hide(); $upload.text( '開始上傳' ).addClass( 'disabled' ); stats = uploader.getStats(); if ( stats.successNum && !stats.uploadFailNum ) { setState( 'finish' ); return; } break; case 'finish': stats = uploader.getStats(); if ( stats.successNum ) { $("#upload-57c79f4938104 input[name='image']").val(fileName); } else { // 沒有成功的圖片,重設 state = 'done'; location.reload(); } break; } updateStatus(); } uploader.onUploadProgress = function( file, percentage ) { var $li = $('#'+file.id), $percent = $li.find('.progress span'); $percent.css( 'width', percentage * 100 + '%' ); percentages[ file.id ][ 1 ] = percentage; updateTotalProgress(); }; uploader.onFileQueued = function( file ) { fileCount++; fileSize += file.size; if ( fileCount === 1 ) { $placeHolder.addClass( 'element-invisible' ); $statusBar.show(); } addFile( file ); setState( 'ready' ); updateTotalProgress(); }; uploader.onFileDequeued = function( file ) { fileCount--; fileSize -= file.size; if ( !fileCount ) { setState( 'pedding' ); } removeFile( file ); updateTotalProgress(); }; uploader.on( 'all', function( type ) { var stats; switch( type ) { case 'uploadFinished': setState( 'confirm' ); break; case 'startUpload': setState( 'uploading' ); break; case 'stopUpload': setState( 'paused' ); break; } }); uploader.onError = function( code ) { alert( 'Eroor: ' + code ); }; $upload.on('click', function() { if ( $(this).hasClass( 'disabled' ) ) { return false; } if ( state === 'ready' ) { uploader.upload(); } else if ( state === 'paused' ) { uploader.upload(); } else if ( state === 'uploading' ) { uploader.stop(); } }); $info.on( 'click', '.retry', function() { uploader.retry(); } ); $info.on( 'click', '.ignore', function() { alert( 'todo' ); } ); $upload.addClass( 'state-' + state ); updateTotalProgress(); }); </script> </body> </html>
php:MafullController.class.php中寫入上傳方法: /** * webuploader 上傳demo */ public function webuploader(){ // 如果是post提交則顯示上傳的檔案 否則顯示上傳頁面 if(IS_POST){ $image=I('post.image'); // 判斷是否有檔案上傳 if (empty($image)) { die('沒有上傳檔案'); } echo '上傳成功路徑為:'.$image; }else{ $this->display(); } } /** * 上傳檔案型別控制 此方法僅限ajax上傳使用 * @param string $path 字串 儲存檔案路徑示例: /Upload/image/ * @param string $format 檔案格式限制 * @param integer $maxSize 允許的上傳檔案最大值 524288000 * @return booler 返回ajax的json格式資料 */ function ajax_upload($path='/Upload/image/',$format='empty',$maxSize='524288000') { ini_set('max_execution_time', '0'); // 去除兩邊的/ $path=trim($path,'/'); // 新增Upload根目錄 $path=strtolower(substr($path, 0,6))==='upload' ? ucfirst($path) : $path; // 上傳檔案型別控制 $ext_arr= array( 'image' => array('gif', 'jpg', 'jpeg', 'png', 'bmp'), 'photo' => array('jpg', 'jpeg', 'png'), 'flash' => array('swf', 'flv'), 'media' => array('swf', 'flv', 'mp3', 'wav', 'wma', 'wmv', 'mid', 'avi', 'mpg', 'asf', 'rm', 'rmvb'), 'file' => array('doc', 'docx', 'xls', 'xlsx', 'ppt', 'htm', 'html', 'txt', 'zip', 'rar', 'gz', 'bz2','pdf') ); if(!empty($_FILES)){ // 上傳檔案配置 $config=array( 'maxSize' => $maxSize, // 上傳檔案最大為500M 'rootPath' => './', // 檔案上傳儲存的根路徑 'savePath' => './Public/'.$path.'/', // 檔案上傳的儲存路徑(相對於根路徑) 'saveName' => array('uniqid',''), // 上傳檔案的儲存規則,支援陣列和字串方式定義 'autoSub' => true, // 自動使用子目錄儲存上傳檔案 預設為true 'exts' => isset($ext_arr[$format])?$ext_arr[$format]:'', ); // 例項化上傳 $upload=new \Think\Upload($config); // 呼叫上傳方法 $info=$upload->upload(); $data=array(); if(!$info){ // 返回錯誤資訊 $error=$upload->getError(); $data['error_info']=$error; echo json_encode($data); }else{ // 返回成功資訊 foreach($info as $file){ $pp=substr($file['savepath'],8); $data['name']=trim($pp.$file['savename'],'.'); echo json_encode($data); } } } }
相關推薦
Thinkphp拖拽上傳檔案-使用webuploader外掛(自己稍微改動了一些地方)——不切片上傳
在拖拽或選擇上傳會遇到上傳檔案大小限制問題——如果檔案很大,可以做切片,也可以不做切片,如果不做切片,檔案太大,可能會上傳失敗,因為“WAMP資料庫上傳檔案的大小及上傳時間會受限制”,可以進行一下操作: 檔案大小限制問題轉載連結:http://blog.csdn.net/l
Thinkphp拖拽上傳檔案-使用webuploader外掛(自己改動了一些地方)——分片上傳
html頁面: <!DOCTYPE html> <html class="js cssanimations"> <head> <meta http-equiv="Content-Type" content="text
File Uploader:支援進度顯示與檔案拖拽的多檔案上傳前端JS指令碼
File Uploader的前身是Ajax Upload。按照官方的說法,升級到FileUploader主要是添加了一些新的特性,修正了一些比較嚴重的錯誤。但在我這個使用者看來,二者最大的不同在於:File Uploader不在基於jQuery。另外,File Upload
利用拖拽效果實現檔案上傳功能
1、獲取檔案的方法file物件是來自使用者在一個<input>表單元素上選擇檔案後返回的filelist物件,也可以是來自自由拖拽操作生成的dataTransfer物件,dataTransf
使用thinkphp實現上傳檔案(uploadify外掛)
語言:php 框架:thinkphp3.2.3 上傳外掛:uploadify 1、在html頁面或者模板中引入CSS和JS <link rel="stylesheet" type="text
bootstrap-fileinput上傳檔案的外掛使用總結----編輯已成功上傳過的圖片
這裡所講述的是:編輯已成功上傳過的圖片 參考:Initial Preview Data http://plugins.krajee.com/file-preview-management-demo下面標記紅色的部<!-- PREVIEW DATA --><!-- PREVIEW DATA
spring mvc 上傳檔案幫助類(留備用)
package com.service.impl; import com.entity.UploadInfo; import com.service.UploadHelp; import org.springframework.web.context.ContextLoader; import o
Nginx反向代理上傳大檔案報錯(failed to load resource : net :: ERR_CONNECTION_RESET)
轉自: https://blog.csdn.net/kinginblue/article/details/50753271?locationNum=14&fps=1 Nginx反向代理上傳大檔案報錯(failed to load resource : net :: ERR_CONNECTION_R
Windows如何連線linux和上傳檔案到linux(securcrt)
一般開發在Windows,部署專案在linux這個時候就要選一個方便的軟體可以將專案扔到linux上去了,securcrt.這個軟體很好實用 網上很多免安裝版的,開啟即用,首先是連線linux 這個就不說 輸入公網ip 使用者名稱 密碼就可以 SecureCRTPo
webAPI 上傳檔案 404錯誤(轉載) webAPI檔案上傳時檔案過大404錯誤的問題
webAPI檔案上傳時檔案過大404錯誤的問題 來源:https://www.cnblogs.com/dzhengyang/p/9149157.html 背景:最近公司有個需求,外網希望自動儲存資料到內網,內網有2臺伺服器可以相互訪問,其中一臺伺服器外網可以訪問,於是想在
上傳檔案Base64格式(React)
記錄一下上傳檔案時將檔案資料轉為Base64的方法 通過 FileReader物件建立一個例項,然後使用 readAsDataURL方法將資料轉為Base64格式 注意: 讀取
chrome 67版本後無法拖拽離線安裝CRX格式外掛的解決方法
第一種:開啟開發者模式即可 (推薦) chrome 的設定 -> 更多工具 -> 擴充套件程式,開啟開發者模式即可! 這是最簡單的方法,小編自己就是使用的這種方法! 第二種方法:修改引數 首先開啟下面地址:chrome://flags/#extensions-on
js、css檔案無法拖拽到jsp檔案裡的問題解決方法
近來新入職,公司電腦用的是myeclipse 2016,在開發的時候遇到js和css檔案無法拖拽到jsp裡的問題,網上搜索很多答案都不能解決,最後在某一論壇找到答案,如下: 1.window-prefences-general-Editors-Text-editors-enable drag an
百度UEditor自定義上傳檔案儲存路徑(補充)
上一篇百度UEditor自定義上傳檔案儲存路徑發表後,再解決了線上管理、線上圖片和線上附件功能不能使用的問題。 需要修改FileManager類: 註釋掉的程式碼是原來jar包的程式碼,不再需要,可以刪除掉。 //private String di
PHP檔案的上傳與下載總結(已經很詳細了)
一、一個簡單的圖片上傳例項 1.1、例項程式碼部分 1.2、測試結果 1.3、move_uploaded_file($tmp_name,$destination)函式的使用:將伺服器上的臨時檔案移動到指定的資料夾下 copy($tmp_name,$destination)函式的使用:將伺服器上的臨
上傳圖片裁剪外掛(基於cropper.js的封裝)
如題,這樣的功能在開發中是非常常見的,cropper.js是一款很好的工具,網上都有詳細的介紹,這篇文章提示很多友好的API和事件cropper.js 裁剪圖片並上傳(文件翻譯+demo) cropper.js需要藉助jquery來實現,所以我這裡的樣式抄襲了
微信小程式 —— 上傳檔案到伺服器(例:上傳圖片到伺服器)
上傳圖片到伺服器: 1.先在前端寫一個選擇圖片的區域來觸發wx.chooseImage介面並用wx.setStorage介面把圖片路徑存起來。 -wxml <view class="
nginx上傳檔案大小限制(413 Request Entity Too Large錯誤解決)
nginx預設上傳最大值是1M 在nginx.conf中新增配置client_max_body_size即可,如下上傳最大為20M client_max_body_size 20m; (修改nginx.conf檔案操作如不會,請參考: https://blog
在SpringBoot的環境下,寫上傳檔案的功能,結果沒有獲取到檔案的問題(ServletFileUpload中getItemIterator(request)為空)
在SpringBoot的環境下,寫上傳檔案的功能,結果沒有獲取到檔案的問題: 情況一: 使用Apache Commons FileUpload 元件上傳檔案時總是返回null,multipart/form-data型別檔案的接收。 <!DOCTYPE html>
iOS上傳檔案或base64(圖片)之AFNetworking 3.0+上傳檔案上傳圖片
1. base64 上傳圖片 /** * 上傳圖片到伺服器 * * @param image * @param photoID * @param photoType */ - (