有時候我們會發現,我們需要對上傳文档進行日志記錄,這樣的記錄通常寫在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了,防盜鏈和權限還不是你說了算?
半夜了,寫的比較匆忙,大家有興趣試一下,有問題可以留言,我會抽時間回複一下的。