1. 程式人生 > >百度富文字編輯器ueditor上傳檔案到bcs中

百度富文字編輯器ueditor上傳檔案到bcs中

(不知為何,程式碼的排版總是不能自動對齊。有點糾結,各位將就看著)

近期在做一個個人部落格,用到了百度的富文字編輯器ueditor。部落格是架在了bae中的。在測試的時候發現,上傳的圖片有時候不會或者是間接性地不會顯現出來,特別詭異的是,我用ie核心的瀏覽器(比如360、ie、搜狗等)訪問時與chrome和ff訪問的結果不一樣,即:有些圖片在ie核心瀏覽器能夠顯示出來,在chrome或者ff中不能顯示,反過來,有些圖片能夠在chrome或者ff中顯示,但是在ie核心瀏覽器中不能顯示。糾結於此,本人顧不得馬上就要考試了,不斷的到網上找資料,修改ueditor原始碼,弄了一天,終於搞定了。現在把過程記錄下,供大家參考,免得大家走彎路。

原來bae只提供程式碼部署,雖然也提供本地檔案寫入,但如果使用UEditor內的上傳方式,圖片只能保證暫時可以訪問。過一段時間後就不一定能訪問【1】。網上有人提出,可以將上傳的檔案儲存到百度雲端儲存(bcs)中,但給出的解決步驟差強人意,或者不全,或者不對,或者是針對非常老版的ueditor。本人擬詳細記錄如何實現通過ueditor上傳檔案到bcs中的步驟,所用到的ueditor是當前最新的版本:ueditor1_3_5,程式語言是php,搭建在百度開放雲平臺2.0中。

使用百度雲端儲存服務進行開發的具體步驟如下【2】

1. 註冊百度賬號,併成為百度開發者。這一步不詳談了,各位應該都知道。

2. #建立應用並獲取金鑰對(ak&sk)

進入管理中心-》應用管理-》服務管理-》我的金鑰,若不存在金鑰,則建立金鑰對,若已經擁有金鑰對了,則直接可用。


3. #建立bucket進入管理中心-》雲平臺管理-》雲端儲存-》我的bucket,點選建立bucket按鈕,輸入bucket名即可。本人的bucket名為:kangry-family


4. #上傳檔案這一步僅僅只是做實驗,便於大家對bucket有個瞭解。可以選擇進入一個bucket,然後上傳本地檔案即可。

5. #許可權設定改許可權設定可在多個粒度設定。一是bucket級別。對bucket右鍵-》屬性-》公開讀;另一個是檔案級別,對檔案右鍵-》屬性-》公開讀。我們只需要在bucket級別把許可權設定為公開讀即可。

6.下載bcs_sdk_php,地址為http://developer.baidu.com/wiki/index.php?title=docs/cplat/stor/sdk,當前版本為1.2.2。解壓到專案資料夾下。假設放在資料夾的路徑為INC_PATH。

7.修改INC_PATH.'Baidu-BCS_SDK-PHP-1.2.2/conf.inc.php'檔案,將第2步的其中一對公鑰和私鑰定義為常量。如下所示。

<?php
//AK 公鑰
define ( 'BCS_AK', '你的公鑰' );
//SK 私鑰
define ( 'BCS_SK', '你的私鑰' );
//superfile 每個object分片字尾
define ( 'BCS_SUPERFILE_POSTFIX', '_bcs_superfile_' );
//sdk superfile分片大小 ,單位 B(位元組)
define ( 'BCS_SUPERFILE_SLICE_SIZE', 1024 * 1024 );

8.假設udeitor在JS_PATH目錄下。對於上傳檔案、圖片、塗鴉的修改。前面幾個版本估計沒有封裝好,所以【1】中所提供的方法並不適用。而我用的這個版本對檔案上傳封裝成了一個類。故我們只需要修改:JS_PATH.'ueditor1_3_5-utf8-php/php/Uploader.class.php'檔案。修改第67行upFile($base64)的函式。從第103行開始,改成如下程式碼即可:

//$this->fullName = $this->getFolder() . '/' . $this->getName();
        $this->fullName = $this->getName();
        if ( $this->stateInfo == $this->stateMap[ 0 ] ) {
			/**
            if ( !move_uploaded_file( $file[ "tmp_name" ] , $this->fullName ) ) {
                $this->stateInfo = $this->getStateInfo( "MOVE" );
            }
			*/
			include_once(INC_PATH."Baidu-BCS_SDK-PHP-1.2.2/bcs.class.php"); //載入SDK
			$bucket = 'kangry-family'; //我已經在百度平臺建好了這個bucket,就像建立目錄一樣
			$object = '/'.$this->fullName; //儲存到百度雲的檔名
			$fileUpload = $file[ "tmp_name" ]; //已經上傳到我伺服器的檔案路徑
			$baiduBCS = new BaiduBCS (); //建立百度雲端儲存物件
			$response = $baiduBCS->get_bucket_acl( $bucket ); //選擇指定的bucket,就像切換資料庫,切換目錄,建立bucket可以看百度SDK裡的例子
			
			if ($response->isOK ()) { // 切換bucket成功
				$response = $baiduBCS->create_object ( $bucket, $object, $fileUpload ); //上傳檔案
				if (! $response->isOK ()) { //上傳失敗執行
					$this->stateInfo = $this->getStateInfo( "MOVE" );
				}
				$this->fullName='http://bcs.duapp.com/kangry-family/'.$this->fullName;
			}else{
				$this->stateInfo = $this->getStateInfo( "MOVE" );
			}
        }

注意,若你會使用base64編碼的圖片上傳,那麼還需要修改base64ToImage($base64Data)函式。將之修改成如下:
    private function base64ToImage( $base64Data )
    {
        $img = base64_decode( $base64Data );
        $this->fileName = time() . rand( 1 , 10000 ) . ".png";
        
		
		//上傳到百度雲平臺
		include_once(INC_PATH."Baidu-BCS_SDK-PHP-1.2.2/bcs.class.php"); //載入SDK
		$bucket = 'kangry-family'; //我已經在百度平臺建好了這個bucket,就像建立目錄一樣
		$object = '/'. $this->fileName; //儲存到百度雲的檔名
		$baiduBCS = new BaiduBCS (); //建立百度雲端儲存物件
		$response = $baiduBCS->get_bucket_acl( $bucket ); //選擇指定的bucket,就像切換資料庫,切換目錄,建立bucket可以看百度SDK裡的例子
		
		if ($response->isOK ()) { // 切換bucket成功
			$response = $baiduBCS->create_object_by_content ( $bucket, $object, $img ); //上傳檔案
			if (! $response->isOK ()) { //上傳失敗執行
				$this->stateInfo = $this->getStateInfo( "IO" );
            	return;
			}
		}else{
			$this->stateInfo = $this->getStateInfo( "IO" );
            return;
		}
		
		/*
		$this->fullName = $this->getFolder() . '/' . $this->fileName;
        if ( !file_put_contents( $this->fullName , $img ) ) {
            $this->stateInfo = $this->getStateInfo( "IO" );
            return;
        }
		*/
		$this->fullName = 'http://bcs.duapp.com/kangry-family/' . $this->fileName;
        $this->oriName = "";
        $this->fileSize = strlen( $img );
        $this->fileType = ".png";
    }

9.修改遠端抓取的圖片(即圖片搜尋)相關程式碼。開啟JS_PATH.'ueditor1_3_5-utf8-php/php/getRemoteImage.php'檔案。修改該檔案的getRemoteImage($uri,$config)函式,從75行程式碼開始,修改成如下:
			/*
            //建立儲存位置
            $savePath = $config[ 'savePath' ];
            if ( !file_exists( $savePath ) ) {
                mkdir( "$savePath" , 0777 );
            }
			*/
            //寫入檔案
            //$tmpName = $savePath . rand( 1 , 10000 ) . time() . strrchr( $imgUrl , '.' );
            $tmpName = time() . rand( 1 , 10000 ) .strrchr( $imgUrl , '.' );
			
			//上傳到百度雲平臺
			include_once(INC_PATH."Baidu-BCS_SDK-PHP-1.2.2/bcs.class.php"); //載入SDK
			$bucket = 'kangry-family'; //我已經在百度平臺建好了這個bucket,就像建立目錄一樣
			$object = '/'.$tmpName; //儲存到百度雲的檔名
			$baiduBCS = new BaiduBCS (); //建立百度雲端儲存物件
			$response = $baiduBCS->get_bucket_acl( $bucket ); //選擇指定的bucket,就像切換資料庫,切換目錄,建立bucket可以看百度SDK裡的例子
			
			if ($response->isOK ()) { // 切換bucket成功
				$response = $baiduBCS->create_object_by_content ( $bucket, $object, $img ); //上傳檔案
				if (! $response->isOK ()) { //上傳失敗執行
					array_push( $tmpNames , "error" );
				}else{
					array_push( $tmpNames , 'http://bcs.duapp.com/kangry-family/'.$tmpName );
				}
			}else{
				array_push( $tmpNames , "error" );
			}
			/*
            try {
                $fp2 = @fopen( $tmpName , "a" );
                fwrite( $fp2 , $img );
                fclose( $fp2 );
                array_push( $tmpNames ,  $tmpName );
            } catch ( Exception $e ) {
                array_push( $tmpNames , "error" );
            }
			*/

10.修改線上圖片管理相關程式碼。開啟JS_PATH.'ueditor1_3_5-utf8-php/php/imageManager.php'檔案。修改該檔案第40行的getfiles($path, &files=array())函式如下:

    function getfiles( $path , &$files = array() )
    {
		include_once(INC_PATH."Baidu-BCS_SDK-PHP-1.2.2/bcs.class.php"); //載入SDK
		$baiduBCS = new BaiduBCS (); //建立百度雲端儲存物件
		$response = $baiduBCS->list_object( $path ); 
		if($response->isOK ()){
			$objectListArr=json_decode($response->body,true);
			for($i=0;$i<$objectListArr["object_total"];$i++){
				if($objectListArr['object_list'][$i]['is_dir']==='0'){
					$objectName=$objectListArr['object_list'][$i]['object'];
					if ( preg_match( "/\.(gif|jpeg|jpg|png|bmp)$/i" , $objectName ) ) {
                        $files[] = 'http://bcs.duapp.com/'.$path.$objectName;
                    }
				}
			}
		}
		/*
        if ( !is_dir( $path ) ) return null;
        $handle = opendir( $path );
        while ( false !== ( $file = readdir( $handle ) ) ) {
            if ( $file != '.' && $file != '..' ) {
                $path2 = $path . '/' . $file;
                if ( is_dir( $path2 ) ) {
                    getfiles( $path2 , $files );
                } else {
                    if ( preg_match( "/\.(gif|jpeg|jpg|png|bmp)$/i" , $file ) ) {
                        $files[] = $path2;
                    }
                }
            }
        }
		*/
        return $files;
    }

同時還要修改第十三行程式碼為你的bucket名。如下:

    //$paths = array('upload/','upload1/');
	$paths=array('kangry-family');

11.修改前端配置。開啟JS_PATH.'ueditor.config.js',修改如下:
        //圖片上傳配置區
        ,imageUrl:URL+"php/imageUp.php"             //圖片上傳提交地址
        //,imagePath:URL + "php/"                     //圖片修正地址,引用了fixedImagePath,如有特殊需求,可自行配置
		,imagePath:" "                     			//圖片修正地址,引用了fixedImagePath,如有特殊需求,可自行配置
        //,imageFieldName:"upfile"                   //圖片資料的key,若此處修改,需要在後臺對應檔案修改對應引數
        //,compressSide:0                            //等比壓縮的基準,確定maxImageSideLength引數的參照物件。0為按照最長邊,1為按照寬度,2為按照高度
        //,maxImageSideLength:900                    //上傳圖片最大允許的邊長,超過會自動等比縮放,不縮放就設定一個比較大的值,更多設定在image.html中
        //,savePath: [ 'upload1', 'upload2', 'upload3' ]      //圖片儲存在伺服器端的目錄, 預設為空, 此時在上傳圖片時會向伺服器請求儲存圖片的目錄列表,
                                                            // 如果使用者不希望傳送請求, 則可以在這裡設定與伺服器端能夠對應上的目錄名稱列表
                                                            //比如: savePath: [ 'upload1', 'upload2' ]

        //塗鴉圖片配置區
        ,scrawlUrl:URL+"php/scrawlUp.php"           //塗鴉上傳地址
        //,scrawlPath:URL+"php/"                            //圖片修正地址,同imagePat
        ,scrawlPath:" "                            //圖片修正地址,同imagePath

        //附件上傳配置區
        ,fileUrl:URL+"php/fileUp.php"               //附件上傳提交地址
        //,filePath:URL + "php/"                   //附件修正地址,同imagePath
        ,filePath:" "                   //附件修正地址,同imagePath
        //,fileFieldName:"upfile"                    //附件提交的表單名,若此處修改,需要在後臺對應檔案修改對應引數

        //遠端抓取配置區
        //,catchRemoteImageEnable:true               //是否開啟遠端圖片抓取,預設開啟
        ,catcherUrl:URL +"php/getRemoteImage.php"   //處理遠端圖片抓取的地址
        ,catcherPath:" "                  //圖片修正地址,同imagePath
        //,catchFieldName:"upfile"                   //提交到後臺遠端圖片uri合集,若此處修改,需要在後臺對應檔案修改對應引數
        //,separater:'ue_separate_ue'               //提交至後臺的遠端圖片地址字串分隔符
        //,localDomain:[]                            //本地頂級域名,當開啟遠端圖片抓取時,除此之外的所有其它域名下的圖片都將被抓取到本地,預設不抓取127.0.0.1和localhost

        //圖片線上管理配置區
        ,imageManagerUrl:URL + "php/imageManager.php"       //圖片線上管理的處理地址
        //,imageManagerPath:URL + "php/"                                    //圖片修正地址,同imagePath
        ,imageManagerPath:" "                                    //圖片修正地址,同imagePath

        //螢幕截圖配置區
        ,snapscreenHost: location.hostname                                 //螢幕截圖的server端檔案所在的網站地址或者ip,請不要加http://
        ,snapscreenServerUrl: URL +"php/imageUp.php" //螢幕截圖的server端儲存程式,UEditor的範例程式碼為“URL +"server/upload/php/snapImgUp.php"”
        ,snapscreenPath: " "
        ,snapscreenServerPort: location.port                                   //螢幕截圖的server端埠
        //,snapscreenImgAlign: ''                                //截圖的圖片預設的排版方式

        //word轉存配置區
        ,wordImageUrl:URL + "php/imageUp.php"             //word轉存提交地址
        ,wordImagePath:" "                       //
        //,wordImageFieldName:"upfile"                     //word轉存表單名若此處修改,需要在後臺對應檔案修改對應引數
因為後臺返回的路徑是http開頭的絕對路徑,因此ueditor.config.js中的imagePath、scrawPath等設為空格字串(不是為空)【1】

經過以上更改,ok,大功告成!其中所有的kangry-family改成你自己的bucket名。若有問題,隨時留言。

參考網址:【1】http://blog.csdn.net/auver/article/details/10103789

【2】http://developer.baidu.com/wiki/index.php?title=docs/cplat/stor/guide

【3】http://blog.csdn.net/ychzh2000/article/details/9129669

你需要做的只是修改兩個配置檔案。

1、修改ueditor1_3_5-utf8-php-for-bcs/php/config.ueditor.for.bcs.1.0.php

define('BUCKET_NAME','');//更改成你的bucket名字
define('BCS_SDK_PATH','./Baidu-BCS_SDK-PHP-1.2.2/');	//bcs的sdk路徑

2、修改ueditor1_3_5-utf8-php-for-bcs/php/config.ueditor.for.bcs.1.0.php/Baidu-BCS_SDK-PHP-1.2.2/conf.inc.php
//AK 公鑰
define ( 'BCS_AK', '' );	//你的公鑰
//SK 私鑰
define ( 'BCS_SK', '' );	//你的私鑰

本人測試,下載的版本有個小問題,需要將ueditor1_3_5-utf8-php\php\imageManager.php的第43行程式碼include_once('config.ueditor.for.bcs.1.0.php');剪下至本檔案的第一行,其他不變。

若有其他問題,請留言。

相關推薦

文字編輯ueditor檔案bcs

(不知為何,程式碼的排版總是不能自動對齊。有點糾結,各位將就看著) 近期在做一個個人部落格,用到了百度的富文字編輯器ueditor。部落格是架在了bae中的。在測試的時候發現,上傳的圖片有時候不會或者是間接性地不會顯現出來,特別詭異的是,我用ie核心的瀏覽器(比如360、i

解決文字編輯無法視訊的問題

本文轉自:http://blog.csdn.net/qq_34787830/article/details/75092347 1、在配置檔案ueditor.config.js中,定位 //xss過濾白名單,即,whitList:{ },對 img: 增加 “_url” 屬性:  2、在下面的 vid

文字編輯UEditor的使用和他的圖片

最近在做一個新聞釋出系統的小專案,需要用到富文字編輯器這個東東,於是上網搜了下,白活兩天給白活出來了,接下來談談我對百度富文字編輯器的使用心得: 要想使用這個富文字編輯器,首先呢得從百度官網上下載,文章最後我會貼出來資源的連結,大家可以直接下載哈~ 下載完成之後呢,解壓,目

文字編輯UEditor:PHP + Nginx 後端配置圖片,下載

由於公司專案需求,花了點時間研究UEditor的後端配置,分享一下使用經驗。注意,這裡的圖片上傳配置,僅能保證圖片管理器的上傳下載正常,而單張照片上傳,後端顯示成功,也接收到檔案了,可是前端會報錯,筆者沒有找到解決方案,所以註釋掉了單張照片上傳的功能,以後有時間再研究。1.後

文字編輯ueditor的使用、非空校驗、引用預定義模板

最近用到百度ueditor編輯器,遇到了很多問題,總結一下ueditor的使用、非空校驗、引用預先寫好的模板。 一、百度ueditor編輯器簡單使用: 1.在百度官網http://ueditor.baidu.com/website/download.html下載壓縮包,解壓之後整體拷

laravel-admin整合文字編輯ueditor

首先要說的是laravel-admin真的是一個非常適合做管理後臺的package。 官方文件有整合wangEditor、ckeditor、PHP editor的示例,如果這幾個編輯器能滿足你的需求可以參照官方文件操作。 ueditor是百度開源的一款編輯器,其中它

文字編輯UEditor使用簡單示例

HTML程式碼: <form id="f_edit" method="post"> <input name="id" type="hidden" value="${activit

文字編輯Ueditor的使用

前言 最近專案需要整合一個編輯器,於是聽從了同事的推薦用的是百度的Ueditor,整合很順利,本地也很順利,然後部署到linux上就各種不能用。。。 期間也百度了很多的帖子,但是多數帖子都是使用的舊

使用文字編輯UEditor碰到的問題

前面使用的是kindEditor,但是發現這個已經不再維護,並且bug不少,而我又不會改,哈哈,所以我就放棄了。 原來想過要用百度的這個UEditor,但是在配置的時候遇到了很多問題,基本上載入不出來,但是最後還是硬著頭皮把那些bug都解決了,順利跑通。 問題1:按百度Demo的配置我發現連最基本的編

文字編輯UEditor的使用總結

在你的web工程或網站根目錄下,新建一個名稱叫ueditor資料夾,把下載ueditor解壓後貼上到你新建的這個資料夾中4.在你的jsp頁面中一如富文字編輯器    1.引入相關js和css       <script type="text/javascript" src="${basePath}/ad

【ASP.NET】6.文字編輯UEditor之從資料庫取出來頁面展示

    將資料存到資料庫中了,那麼怎麼讓資料原樣顯示到編輯器裡呢?讀取資料庫裡一條資料,獲取到的資料是這樣的:<p style="text-align:center;"> <img src="/LJWY/MGMT/attached/image/2016-1

文字編輯UEditor的改造

      在Java專案中,做內容管理功能時,需要用到富文字編輯器,目前流行的富文字編輯器還是比較多的,因為專案中用的是百度的UEditor,所以對UEditor使用中的一些問題做個總結吧。      因為是Java專案所以使用的是隻能選擇jsp版本的UEditor,使用方

關於文字編輯UEditorctrl+enter鍵傳送訊息的解決方案

最近一個訊息外掛中遇到一個特殊需求,就是一旦ueditor編輯器獲取焦點以後,除非讓編輯器失去焦點,否則window的鍵盤監聽事件就失去作用了,在這種情況下如何才能使用ctrl+enter傳送已經編輯好的內容呢?上網搜了好多,發現大家都遇到這個問題了,這裡我將我自己的解決方

文字編輯ueditor使用小結

   /** * 圖片上傳 * @author CK * @param upfile * @param request * @param response * @return * @throws Exception

【ASP.NET】9.解決文字編輯UEditor往後臺資料寫入資料庫時,出現錯誤:檢測到有潛在危險的Request

解決方法:把傳資料的方式換一下,在函式上面新增[ValidateInput(false)],如果是winform頁面,在aspx頁面裡新增ValidateRequest="false"%@ Page V

javaSSM+maven整合文字編輯Ueditor的一系列方法和可能遇到的問題

一、怎麼顯示圖片? 這是我專案的總體排版 1.解壓UTF-8版本的Ueditor到webapp下  新建一個叫index.jsp的檔案 內容如下 2.修改imageUrlPrefix的值 ,對應自己的專案名 3.因為SSM包含了mvc 過濾靜態資源 所以去

python web.py使用文字編輯 UEditor

原文連結 http://flask123.sinaapp.com/article/47/UEditor簡介UEditor是由百度「FEX前端研發團隊」開發的所見即所得富文字web編輯器,具有輕量,可定製,注重使用者體驗等特點,開源基於MIT協議,允許自由使用和修改程式碼。由於

文字編輯UEditor

有文件,有演示.使用者體驗很舒服,介面很乾淨,很好.比之前的富文字編輯器好用. 至於jsp或者asp.net、php配置使用,百度谷歌很多.可以找一找,配置一下. 網上找到一個人整理的富文字編輯器 轉自:http://hi.baidu.com/gezi419439610/

SSH2專案引入文字編輯Ueditor編輯

一、整合所需UEditor原始碼 這個可以到http://ueditor.baidu.com/website/download.html#ueditor下載相應版本。 二、導包 把上述包拷貝到WEB-INF的lib下 三、JSP頁面處理 [javascript] view plain copy pr

文字編輯Ueditor 整合springboot(不修改原始碼)

專案中使用到百度的富文字編輯器ueditor,網上也有相關的部落格做了比較全面的介紹,只是需要較多時間去一一整理,個人認為這其中的難點主要在於載入ueditor的配置檔案config.json,網上的教程大概可以分為兩種載入方式,一是修改原始碼直接去讀取uedi