有時候我們會發現,我們需要對上傳文档進行日志記錄,這樣的記錄通常寫在LOG文档或數據庫中,那麽,通過TP本身的上傳類,可以實現的,但是只能做到編輯器外上傳並記錄,而我們在編輯器内上傳的圖片、附件卻無法捕獲,所以這裡我分享一個我寫的小代碼片段,僅供參考。
首先如果你不知道ckeditor,那麽請忽略此文。
當我們在模板中,將ckeditor配置好後,需要在JS代碼中進行一些調整或修改,如下:
CKEDITOR.replace( 'v_content', { filebrowserImageUploadUrl : '/Files/ck_upload.shtml' });
這裡是在JS部分進行了修改,指定了當使用編輯器的圖片功能時,上傳的請求地址在那裡。一般來說ckeditor是不帶上傳的,你把上面的配置調整好後,點擊圖片,就會出現上傳功能,但是只是個架子,沒有實際效果。具體的處理請看下面:
function ck_upload($ftype = 'image') { if($ftype == 'image'){ $ftype = array('jpg', 'gif', 'png', 'jpeg', 'bmp'); } header("Content-type:text/html"); import('ORG.Net.UploadFile'); $upload = new UploadFile(); // 實例化上傳類 $upload->maxSize = -1; // 設置附件上傳大小 $upload->allowExts = $ftype; // 設置附件上傳類型 $upload->savePath = './Public/Uploads/'; // 設置附件上傳目錄 $upload->autoSub = true; $upload->subType = 'date'; if (!$upload->upload()) {// 上傳錯誤提示錯誤信息 echo "<script type=\"text/javascript\">window.parent.CKEDITOR.tools.callFunction(".$this->_get('CKEditorFuncNum').", '/', '上傳失敗," . $upload->getErrorMsg() . "!');</script>"; } else { //// 上傳成功 獲取上傳文档信息並存入數據庫 $info = $upload->getUploadFileInfo(); // 獲取具體的路徑,用於返回給編輯器 $savepath = $info[0]['savepath'].$info[0]['savename']; //下面的輸出,會自動的將上傳成功的文档路徑,返回給編輯器。 echo "<script type=\"text/javascript\">window.parent.CKEDITOR.tools.callFunction(".$this->_get('CKEditorFuncNum').",'$savepath','');</script>"; } }
會發現TP的代碼裡,有兩耑是輸出JS的,一個是報錯,一個是返回圖片,這個自己看一下,就能懂的。很簡單的。
上傳完成後,我使用的是防盜鏈模式,所以圖片路徑是.shtml,如果你按照上面的方式,那麽你的返回路徑可能是upload/img/abc.jpg之類的。
代碼肯定沒問題的,我N個項目裡在用,這樣做的目的是,我能控制文档了,能控制它的上傳時間,對文档進行權限管理等等,這些都是很方便的。另外,在附送一個防盜鏈的方法,前提是,將圖片路徑存在數據庫裡。
我這裡,文档的表示使用的是id標示:
function getfile($id) { $res = M('files')->find($id); $file = $res['savepath']; if (file_exists($file)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . basename($file)); header('Content-Transfer-Encoding: binary'); header('Pragma: public'); $sTmpVar = fread(fopen($file, 'r'), filesize($file)); echo $sTmpVar; } }
將就看下把,$res['savepath']就是數據庫裡的文档路徑,這個方法照抄就行了。這樣你就能把upload/img/xxx.jpg轉化成諸如file/1022.shtml之類的URL了,防盜鏈和權限還不是你說了算?
半夜了,寫的比較匆忙,大家有興趣試一下,有問題可以留言,我會抽時間回複一下的。