免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 13789 | 回复: 25

FCKeditor保存远程文件为本地文件的插件 [复制链接]

论坛徽章:
0
发表于 2006-09-26 22:09 |显示全部楼层
说到底是啥功能呢?就是可以把你粘贴到编辑器里面的别的服务器的图片保存到自己的服务器上,变成本地图片

记得把FCKeditor下面的sample都删除掉

这个没有做服务器端的过滤,所以只适合后台使用,其实要加也很容易,不过这几天感冒了,痛苦中。。。

  1. <?
  2. include './ServerXMLHTTP.php';
  3. //作者:luojiannx@gmail.com
  4. //说明:参考了雷の龙的asp版本
  5. ?>
  6. <style>
  7. <!--
  8. body {
  9. font-size:10pt;
  10. }
  11. -->
  12. </style>
  13. <body bgcolor="#E3E3C7" leftmargin="0" rightmargin="0">
  14. <SCRIPT LANGUAGE="JavaScript">
  15. <!--
  16.         var a=window.opener.FCK.EditorDocument.body.innerHTML;
  17. //-->
  18. </SCRIPT>
  19. <?
  20.         $files=$_POST['files'];
  21.         for($i=0;$i<=count($files);$i++)
  22.         {
  23.                 if($files[$i]!='')
  24.                 {
  25.                         $now=getdate();
  26.                         $filename=$now[year].$now[mon].$now[mday].$now[hours].$now[minutes].$now[seconds].$i.strrchr(trim($files[$i]),"."); ;
  27.                         $savetime=SaveHTTPFile(trim($files[$i]),"/upload/Image/upfiles",$filename);
  28.                         ob_start();
  29.                         ?>
  30.                         <SCRIPT LANGUAGE="JavaScript">
  31.                         <!--
  32.                      //不晓得怎么实现replaceall的功能,只好用了这个笨办法
  33.               //希望有朋友能在此改进下
  34.                         for(var lj=0;lj<20;lj++)
  35.                         {
  36.                                 a=a.replace("<?=trim($files[$i])?>","http://www.xxx.com/upload/Image/upfiles/<?=$filename?>");
  37.                         }
  38.                         //重点:下面的'FCKeditor1'就是你给你的编辑器取得name
  39.                                                 //参见FCKeditor的示例代码,你就会知道他是什么了
  40.                         var oEditor = window.opener.FCKeditorAPI.GetInstance('FCKeditor1');
  41.                         oEditor.SetHTML(a);
  42.                         document.write("文件:<?=trim($files[$i])?>已经保存成功!耗时:<?=$savetime?>,正在保存下一个文件<BR>");
  43.                         -->
  44.                         </SCRIPT>
  45.                         <?
  46.                         ob_end_flush();
  47.                 }
  48.         }

  49. ?>
  50. <SCRIPT LANGUAGE="JavaScript">
  51. <!--
  52.         window.opener.FCKeditorAPI.GetInstance('FCKeditor1').SetHTML(a);
  53.         document.write("<font clor=red><B>所有文件保存成功!</b></font>");
  54.         setTimeout("window.close();",2000);
  55. //-->
  56. </SCRIPT>
  57. </body>
复制代码

[ 本帖最后由 luojiannx 于 2006-9-26 22:41 编辑 ]

savehttpfiles.rar

4.81 KB, 下载次数: 540

完整插件

论坛徽章:
0
发表于 2006-09-26 22:11 |显示全部楼层

  1. <style>
  2. <!--
  3. td {
  4. font-size:10pt;
  5. }
  6. -->
  7. </style>
  8. <body bgcolor="#E3E3C7" leftmargin="0" rightmargin="0">
  9. <span id="t"></span>
  10. <SCRIPT LANGUAGE="JavaScript">
  11. <!--
  12. t.innerHTML="正在分析中...";
  13. function getfiles()
  14. {
  15.         var a=window.opener.FCK.EditorDocument.body.innerHTML;
  16.         var re=/http:\/\/(\w+\.)+(net|com|cn|org|cc|tv)(\S*\/)(\S)+\.(gif|jpg|png|bmp)/gi;
  17.         var url=a.match(re);
  18.         if(url == null)
  19.         {
  20.                 url="";
  21.         }
  22.         var ljflag=0;
  23.         var s="";
  24.         s=s+"<FORM METHOD=POST ACTION=\"save.php\" name=allfiles>";
  25.         s=s+"<table width=\"100%\" cellspacing=\"0\" cellpadding=\"0\">";
  26.         s=s+"<tr height=\"20\"><td colspan=\"2\"><input type=\"submit\" style=\"color: #000000; border: 1px solid #737357; background-color: #C7C78F\" name=\"button1\" value=\"保存到本地\"><BR></td></tr>";
  27.         for(var i=0;i<url.length;i++)
  28.         {
  29.                 for(var ljtemp=0;ljtemp<i;ljtemp++)
  30.                 {
  31.                         if(url[i]==url[ljtemp])
  32.                         {
  33.                                 ljflag=1;
  34.                                 break;
  35.                         }
  36.                         else
  37.                         {
  38.                                 ljflag=0;
  39.                         }
  40.                 }
  41.                 if(!ljflag)
  42.                 {
  43.                                         s=s+"<tr bgcolor=\"#F1F1E3\" height=\"20\"><td><input type=\"checkbox\" checked name=\"files[]\" value=\""+url[i]+"\"></td><td><a href=\""+url[i]+"\" target=\"_blank\">"+url[i]+"</a></td></tr>";
  44.                 }
  45.         }
  46.         s=s+"<tr height=\"20\"><td colspan=\"2\"><BR><input type=\"submit\" style=\"color: #000000; border: 1px solid #737357; background-color: #C7C78F\" name=\"button1\" value=\"保存到本地\"></td></tr>";
  47.         s=s+"</table>";       
  48.         s=s+"</FORM>";
  49.         t.innerHTML=s;
  50. }
  51. setTimeout("getfiles()",1000);
  52. //-->
  53. </SCRIPT>
  54. </body>
复制代码

论坛徽章:
0
发表于 2006-09-26 22:12 |显示全部楼层

  1. /*
  2. * FCKeditor - The text editor for internet
  3. * Copyright (C) 2003-2005 Frederico Caldeira Knabben
  4. *
  5. * Licensed under the terms of the GNU Lesser General Public License:
  6. *                 http://www.opensource.org/licenses/lgpl-license.php
  7. *
  8. * For further information visit:
  9. *                 http://www.fckeditor.net/
  10. *
  11. * File Name: fckplugin.js
  12. *         Plugin to insert "savehttpfiless" in the editor.
  13. *
  14. * File Authors:
  15. *                 Frederico Caldeira Knabben (fredck@fckeditor.net)
  16. */
  17. var SaveHTTPFilesCommond = function() {this.Name = 'savehttpfiles';}
  18. SaveHTTPFilesCommond.prototype.Execute = function () {window.open(FCKPlugins.Items['savehttpfiles'].Path+'allfiles.php','allfiles','width=500,height=400,scrollbars=yes,resizable=yes');}
  19. SaveHTTPFilesCommond.prototype.GetState = function() {return FCK_TRISTATE_OFF;}

  20. // Register the related command.
  21. FCKCommands.RegisterCommand( 'savehttpfiles',new SaveHTTPFilesCommond()) ;

  22. // Create the "Plaholder" toolbar button.
  23. var osavehttpfilesItem = new FCKToolbarButton( 'savehttpfiles', "保存远程文件" ) ;
  24. osavehttpfilesItem.IconPath = FCKPlugins.Items['savehttpfiles'].Path + 'savehttpfiles.gif' ;
  25. FCKToolbarItems.RegisterItem( 'savehttpfiles', osavehttpfilesItem ) ;


  26. //// The object used for all savehttpfiles operations.
  27. var FCKsavehttpfiless = new Object() ;

  28. //// Add a new savehttpfiles at the actual selection.
  29. FCKsavehttpfiless.Add = function( name )
  30. {
  31.         var oSpan = FCK.CreateElement( 'savehttpfiles' ) ;
  32.         this.SetupSpan( oSpan, name ) ;
  33. }

  34. FCKsavehttpfiless.SetupSpan = function( span, name )
  35. {
  36.         span.innerHTML = '[[ ' + name + ' ]]' ;

  37.         span.style.backgroundColor = '#ffff00' ;
  38.         span.style.color = '#000000' ;

  39.         if ( FCKBrowserInfo.IsGecko )
  40.                 span.style.cursor = 'default' ;

  41.         span._fcksavehttpfiles = name ;
  42.         span.contentEditable = false ;

  43.         // To avoid it to be resized.
  44.         span.onresizestart = function()
  45.         {
  46.                 FCK.EditorWindow.event.returnValue = false ;
  47.                 return false ;
  48.         }
  49. }



复制代码

论坛徽章:
0
发表于 2006-09-26 22:13 |显示全部楼层
  1. <?
  2. function getmicrotime(){
  3.     list($usec, $sec) = explode(" ",microtime());
  4.     return ((float)$usec + (float)$sec);
  5. }

  6. function SaveHTTPFile($fFileHTTPPath,$fFileSavePath,$fFileSaveName)
  7. {
  8.         //记录程序开始的时间
  9.         $BeginTime=getmicrotime();
  10.        
  11.         //取得文件名
  12.            //这里是绝对路径哦
  13.         $fFileSaveName="/www".$fFileSavePath."/".$fFileSaveName;
  14.        
  15.         //取得文件的内容
  16.         ob_start();
  17.         readfile($fFileHTTPPath);
  18.         $img = ob_get_contents();
  19.         ob_end_clean();
  20.         //$size = strlen($img);
  21.        
  22.         //保存到本地
  23.         $fp2=@fopen($fFileSaveName, "a");
  24.         fwrite($fp2,$img);
  25.         fclose($fp2);

  26.         //记录程序运行结束的时间
  27.         $EndTime=getmicrotime();

  28.         //返回运行时间
  29.         return($EndTime-$BeginTime);
  30. }
  31. ?>
复制代码

[ 本帖最后由 luojiannx 于 2006-9-26 22:29 编辑 ]

论坛徽章:
0
发表于 2006-09-26 22:39 |显示全部楼层
把下载的文件夹拷到plugins的目录下面

不会用的自己先琢磨琢磨
里面的路径什么的肯定是要改成适合你自己的

fckconfig.js
也需要你自己改改

php.ini可能也要改

还有读写权限啥的,如果我说的是什么你不知道的话,就不要用了

另外顶贴的人多的话,过几天我可能会出个详细的说明:)

[ 本帖最后由 luojiannx 于 2006-9-26 22:43 编辑 ]

论坛徽章:
0
发表于 2006-09-27 01:27 |显示全部楼层
我顶你!

这个插件很实用,从别人网站上copy内容过来,图片就直接下载保存到我的服务器上了。以往还要手工把别人网页上的图片另存为,再插入,真是让人很郁闷的体力劳动!

论坛徽章:
0
发表于 2006-09-27 14:35 |显示全部楼层
没多少人有兴趣?
看来我是自做多情了

不过闲着也是闲着,就大概说下怎么使用

配置文件fckconfig.js中搜索plugin这个单词,
然后你会看到那一行是被注释掉了的
你在下面照着样子加一行
FCKConfig.Plugins.Add( 'savehttpfiles' );
这里的savehttpfiles是你在plugin目录下面的对应的插件文件夹名

然后在定义default菜单条的里面FCKConfig.ToolbarSets["Default"] = [
        .......这里省略好些行
        ['FitWindow','-','About','-','savehttpfiles']
] ;

看到没?在about后面加了点东西


php.ini里面可能有些东西也要修改
有个必须要是on
allow_url_fopen    On
disable_functions里面不能有readfile

上传的目录权限设置成777

另外
save.php中
$savetime=SaveHTTPFile(trim($files[$i]),"/upload/Image/upfiles",$filename);

把"/upload/Image/upfiles"改成你所在服务器的相对于网站根目录的形式

a=a.replace("<?=trim($files[$i])?>","http://www.xxx.com/upload/Image/upfiles/<?=$filename?>";

这里也要改成与你的网站相符的内容

saveXMLhttp.php中

$fFileSaveName="/www".$fFileSavePath."/".$fFileSaveName;

前面/www是网站根目录在服务器的绝对路径,这里也要改成你自己网站的根目录绝对路径

[ 本帖最后由 luojiannx 于 2006-9-27 14:42 编辑 ]

论坛徽章:
0
发表于 2006-09-27 15:55 |显示全部楼层
我也支持....但沒有example...我想像不到出來是什麼效果哦....

论坛徽章:
0
发表于 2006-09-27 16:53 |显示全部楼层
我是不可能开放自己的后台给你测试的

如果有需要的话,装上就知道怎么用了

论坛徽章:
0
发表于 2006-09-28 16:03 |显示全部楼层
o...我花了一小時才能設定完成呢..........

功能很好哦...遺憾設定的方法有點麻煩哦..要在數個page不斷試..
如果可以簡化步驟或統一在一版中..會比較好一點呢.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP