如何用FCKEditor编辑器上传图片、FLASH、视频到MOSS的图片库中

FCKEditor编辑器是一款功能齐全,性能出色的编辑器。

FCKEditor由于其开放源码,自定义非常强大,因此应用范围非常广泛,许多著名论坛的编辑器都是基于此编辑器更改的。MOSS中的RTF编辑器小巧精悍,但功能齐全性上略有不及,很难适应挑涤的企业用户的需求。因此,在信息发布等模块中,通常采用其它的第三方编辑器。如果采用其它编辑器,它与MOSS的楔合度将是一个不得不考虑的问题。楔合度越高,在用户体验,后期维护上占有比较大的优势。

  这里我将讲解更改FCKEditor的上传图片等文件的方式提高楔合度的一个案例。FCKEditor默认情况下,图片等文件是上传到服务器文件系统中的一个文件夹内的。这种设计机置在其它的项目中,可能不会有什么问题,但如果在MOSS项目中,将是一个不得不正视的问题。

  第一、MOSS备份需要额外考虑该文件夹的备份。

  第二、在NLB环境下,文件上传将会随机上传到NBL中的某一台前端上,这是一个非常严重的缺陷,用户访问时,可能造成文件访问不到。因此,如果FCKEditor要应用到MOSS中,将不得不更改这种上传机置。试想,如果能够将图片等文件上传到MOSS中的图片库或文档库上,那么一切将迎刃而解了。

  具体实现如下:

  一、打开FCKeditor.Net_2.6.3工程。(网上可以下载,FCKEditor支持.net的源码)

  二、FileWorkerBase.cs

  更改FileUpload方法。增加图片压缩方法CreateThumbnail.

       protectedvoidFileUpload(stringresourceType,stringcurrentFolder,boolisQuickUpload)
    {
      HttpPostedFileoFile=Request.Files["NewFile"];
      stringsFileName="";
      if(oFile==null)
      {
        this.SendFileUploadResponse(202,isQuickUpload);
        return;
      }
      //Mapthevirtualpathtothelocalserverpath.
      //stringsServerDir=this.ServerMapFolder(resourceType,currentFolder,isQuickUpload);
      //Gettheuploadedfilename.
      sFileName=System.IO.Path.GetFileName(oFile.FileName);
      sFileName=this.SanitizeFileName(sFileName);
      stringsExtension=System.IO.Path.GetExtension(oFile.FileName);
      sExtension=sExtension.TrimStart('.');
      if(!this.Config.TypeConfig[resourceType].CheckIsAllowedExtension(sExtension))
      {
        this.SendFileUploadResponse(202,isQuickUpload);
        return;
      }
      if(this.Config.CheckIsNonHtmlExtension(sExtension)&&!this.CheckNonHtmlFile(oFile))
      {
        this.SendFileUploadResponse(202,isQuickUpload);
        return;
      }
      intiErrorNumber=0;
      //intiCounter=0;
      //文件上传到新闻图片库中
      stringstrFileUrl=string.Empty;
      stringstrURL="http://"+this.Page.Request.Url.Authority;
      SPSecurity.RunWithElevatedPrivileges(delegate
      {
        //创建指定站点集
        using(SPSitesite=newSPSite(strURL))
        {
          //打开网站
          using(SPWebweb=site.OpenWeb())
          {
            stringstrUserName=SPContext.Current.Web.CurrentUser.LoginName;
            strUserName=strUserName.Substring(strUserName.LastIndexOf("")+1);
            SPPictureLibraryplb=(SPPictureLibrary)web.Lists["新闻图片库"];
            oFile.InputStream.Position=0;
            MemoryStreamfStream=newMemoryStream();
            if(sExtension.ToLower().Equals("jpg")||
              sExtension.ToLower().Equals("gif")||
              sExtension.ToLower().Equals("jpeg")||
              sExtension.ToLower().Equals("png")||
              sExtension.ToLower().Equals("bmp"))
            {
              #region图像压缩开始
              Streamstream=oFile.InputStream;
              BitmapmyBitmap=newBitmap(stream);
              intWidth=myBitmap.Width;
              intHeight=myBitmap.Height;
              if(Width>700)
              {
                Width=700;
                Height=myBitmap.Height*700/myBitmap.Width;
              }
              System.Drawing.ImagemyThumbnail=CreateThumbnail(myBitmap,Width,Height,false);
              //ConfigureJPEGCompressionEngine
              System.Drawing.Imaging.EncoderParametersencoderParams=newSystem.Drawing.Imaging.EncoderParameters();
              long[]quality=newlong[1];
              quality[0]=75;
              System.Drawing.Imaging.EncoderParameterencoderParam=newSystem.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality,quality);
              encoderParams.Param[0]=encoderParam;
              System.Drawing.Imaging.ImageCodecInfo[]arrayICI=System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();
              System.Drawing.Imaging.ImageCodecInfojpegICI=null;
              for(intx=0;x<arrayICI.Length;x++)
              {
                if(arrayICI[x].FormatDescription.Equals("JPEG"))
                {
                  jpegICI=arrayICI[x];
                  break;
                }
              }
              myThumbnail.Save(fStream,jpegICI,encoderParams);
              #endregion
              myThumbnail.Dispose();
              myBitmap.Dispose();
            }
            else
            {
              fStream=(MemoryStream)oFile.InputStream;
            }
            fStream.Position=0;
            intintLength=(int)fStream.Length;
            byte[]contents=newbyte[intLength];
            fStream.Read(contents,0,intLength);
            //fStream.Read(contents,0,(int)fStream.Length);
           
            strFileUrl="http://"+this.Page.Request.Url.Authority+plb.DefaultViewUrl.Substring(0,plb.DefaultViewUrl.LastIndexOf("Forms/"));
            
            web.AllowUnsafeUpdates=true;
            sFileName=DateTime.Now.Year.ToString()+
            DateTime.Now.Month.ToString()+
            DateTime.Now.Day.ToString()+
            DateTime.Now.Hour.ToString()+
            DateTime.Now.Minute.ToString()+
            DateTime.Now.Second.ToString()+
            DateTime.Now.Millisecond.ToString()+"."+sExtension;
            strFileUrl+=sFileName;
            SPFilespfile=web.Files.Add(strFileUrl,contents);
                        
            fStream.Dispose();
            
          }
        }
      });
      this.SendFileUploadResponse(0,true,strFileUrl,sFileName);
    }
    ///<summary>
    ///AbetteralternativetoImage.GetThumbnail.Higherqualitybutslightlyslower
    ///</summary>
    ///<paramname="source"></param>
    ///<paramname="thumbWi"></param>
    ///<paramname="thumbHi"></param>
    ///<returns></returns>
    publicstaticBitmapCreateThumbnail(Bitmapsource,intthumbWi,intthumbHi,boolmaintainAspect)
    {
      //returnthesourceimageifit'ssmallerthanthedesignatedthumbnail
      if(source.Width<thumbWi&&source.Height<thumbHi)returnsource;
      System.Drawing.Bitmapret=null;
      try
      {
        intwi,hi;
        wi=thumbWi;
        hi=thumbHi;
        if(maintainAspect)
        {
          //maintaintheaspectratiodespitethethumbnailsizeparameters
          if(source.Width>source.Height)
          {
            wi=thumbWi;
            hi=(int)(source.Height*((decimal)thumbWi/source.Width));
          }
          else
          {
            hi=thumbHi;
            wi=(int)(source.Width*((decimal)thumbHi/source.Height));
          }
        }
        //originalcodethatcreateslousythumbnails
        //System.Drawing.Imageret=source.GetThumbnailImage(wi,hi,null,IntPtr.Zero);
        ret=newBitmap(wi,hi);
        using(Graphicsg=Graphics.FromImage(ret))
        {
          g.InterpolationMode=System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
          g.FillRectangle(Brushes.White,0,0,wi,hi);
          g.DrawImage(source,0,0,wi,hi);
        }
      }
      catch
      {
        ret=null;
      }
      returnret;
    }

 

转载于:https://www.cnblogs.com/masahiro/archive/2011/05/06/10128853.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
最近做了一个文章管理的系统,用到在线编辑器,修改了一下现在能实现音频,视频,图片,附件,Flash等文件的上传。费了好大的功夫。。 FCKeditor应用在ASP.NET上,需要两组文件,一组是FCKeditor本身,另一个是用于ASP.NET的FCKeditor控件(分为1.1和2.0两个版本,这里使用2.0版本)。 1. 将FCKeditor加入到项目 解压FCKeditor编辑器,得到文件夹fckeditor,复制此文件夹到Web应用的项目下(也可以是子孙目录下)。 解压FCKeditor控件,在其子目录bin/Release/2.0下有一个程序集。在Web应用的项目引用该程序集。 2. 在页面使用FCKeditor 有两种方式。 (1)手工编码 在页面加入ASP.NET指令: 然后在需要的地方加入FCKeditor控件: (2)集成到Visual Studio工具箱 打开一ASP.NET页面,展开Toolbox,打开右键菜单,选择“Choose Items ...”,在出现的“Choose Toolbox Items”会话框的“.NET Framework Components”选项卡选择“Browse”,找到并选FCKeditor程序集,打开后回到“Choose Toolbox Items”窗口,点击“OK”,完成控件导入。 这时,在Toolbox的General分类下出现了一个名为FCKeditor的控件,可以像使用Visual Studio内置控件一样使用它。 3. 配置FCKeditor编辑器路径 在页面,使用的是FCKeditor控件,该控件需要知道FCKeditor编辑器文件组的路径。有两种配置方法。 (1)配置web.config 在appSettings配置节加入 使用这种配置方法后,对于项目任何一个页面用到的FCKeditor控件,都不用再配置其BasePath属性。 (2)直接对用到的FCKeditor控件进行配置 在页面代码设置FCKeditor的属性BasePath为FCKeditor编辑器文件组的路径,或者在Page_Init事件处理器设置其BasePath的值。 4. 配置FCKeditor编辑器文件上传路径 在web.config的appSettings配置节加入 或者 这样,就完成了FCKeditor向ASP.NET页面的集成工作。 二、配置FCKeditor 按照FCKeditor的默认配置,可以完成一些常用的HTML可视化编辑工作,但在实际应用,还需要对其做进一步的配置。FCKeditor控件的可配置属性不多,且配置后只能作用于一个单一实例。实际上,需要对FCKeditor编辑器文件组的通用配置文件/fckconfig.js和ASP.NET专用文件上传管理代码文件/editor/filemanager/connectors/aspx/config.ascx进行配置。 1. 配置控件语言 FCKeditor是自动探测浏览器所使用的语言编码的,其默认语言是英文。修改配置行"FCKConfig.DefaultLanguage = 'en';"为'zh-cn',采用文为默认语言。 2. 配置控件应用技术 FCKeditor默认是用于php技术的。修改配置行"var _FileBrowserLanguage = 'php';"和"var _
FCKeditor是目前最优秀的可见即可得网页编辑器之一,它采用JavaScript编写。具备功能强大、配置容易、跨浏览器、支持多种编程语言、开源等特点。它非常流行,互联网上很容易找到相关技术文档,国内许多WEB项目和大型网站均采用了FCKeditor。 FCKeditor是一个专门使用在网页上属于开放源代码的所见即所得文字编辑器。它志于轻量化,不需要太复杂的安装步骤即可使用。 “FCKeditor”名称的“FCK” 是这个编辑器的作者的名字Frederico Caldeira Knabben的缩写。 正如MS Office在个人PC上是最普及的文本编辑器一样,FCKeditor是使用最广泛的网页编辑器,所见即所得,简单易用,功能很不错。 首先需要说明的是,与通常意义上的编辑器不同,FCKeditor并不是一个需要安装的程序,或许说它是一个网页源代码更为贴切,所以,取而代之安装过程的是与网页源代码相集成的调用过程。 FCKeditor运行的环境是网页浏览器,基本上IE5.5以上,或者是其它浏览器如火狐、360、Chrome、QQ、Netscape等,都可以兼容。而它可以兼容并集成的网页代码格式也相当多,包括ASP、ASP.Net、PHP、Perl、Java等,支持格式之多,也是同类编辑器无法替代的。 在这一版本我们完全实现了与轻松互联网开发平台的无缝整合,在平台调用FCKeditor跟使用标签一样Easy(例子文件在_samples/editor目录下)。而且没给恶意攻击者留任何可能的漏洞。 另外,对重点功能也进行扩展,如上传文件和源代码高亮显示。上传文件不再需要专门的配置,直接使用即可,强化了上传图片、附件及目录管理功能,实现全汉语UI操作和实时预览。增加了插入Flash、媒体及视频功能,其操作仍然是同样地轻松。 Easy do it,轻松互联网开发平台(原WebEasy,简称轻开平台)是一个运行于JVM+HTTP(及HTTPS协议)的应用服务器开发平台。 轻开平台基于汉语的思维方式并巧妙地结合英文思维方式的优点设计了一套轻松Easy的开发规则,用java语言开发实现为一个强大的开发平台,为开发者提供了一个直接轻松面向应用的开发环境。 轻开平台同时支持使用多个数据源和不同厂商提供的数据库服务器,只要支持JDBC访问及基于SQL规范的数据库(如:MySQL、SQLServer、Oracle、DB2、Teradata、SyBase等关系型数据库及基于SQL的大数据分析系统Vertica)。轻开平台能在一个应用系统平等使用多个不同的数据库,而这只需要添加一个配置文件就轻松实现。“信息孤岛”在这儿就只剩下了一个传说! 轻开平台的低层开发语言是Java,也就是说Java能干啥轻开就能干啥,如JAVA能跨平台(操作系统)轻开就能跨平台。而开发者却不需要会Java! 轻开平台的最大优势就是Easy,基本上解决了传统开发的不能克服的由于应用需求变更而导致开发无法继续进行和前边提到的“信息孤岛”问题,基于轻开平台的直接好处是: • 加快开发进程:计算机诞生以来,软件开发一直是一项高深莫测的工作,被冠以“高科技”、“新技术”,导致信息化的门坎太高,IT技术不能普遍服务于大众,很难转化为生产力。Easy do it 正在突破这一障碍,让提出应用需求的用户直接参与互联网系统开发。只需会html和SQL,就能够完成Web应用系统开发,只需会json和SQL,就能够完成移动App服务器系统开发。这对每一位其他的行业的业务精英来说,简直就是“小菜一碟”,学会html、json和SQL语法远比进一步提高在本行业的业务水平更容易,您的智慧很快被“翻译”成互联网应用系统软件。 • 降低开发成本:无需雇佣高水平高薪的程序员,简化了需求到开发的环节; • 部署成本低:无需复杂的调试和配置; • 集成成本低:支持任何关系数据库(如:Mysql、MSSQL、DB2、Oracle……),可同时支持多个不同数据库,从源头上解决“信息孤岛”问题; • 资源成本低:PIII450/64M/10G以上PC即可高效地运行,基于轻开平台的应用系统,系统本身不再为自身庞大的体积而付出大部分资源,而是把IT资源更有效的服务于应用。 轻开平台干了些啥: 高夫数据分析App服务器:移动App服务器+大数据分析系统(Vertica),网址 http://182.92.150.191/; 通益车联网:移动App(及车载终端)服务器+大数据分析系统(Vertica),网址 http://103.249.252.247/; 达品客电子商务网:电子商务,网址 http://www.dapinke.com/; 北京简单和家官网:电子商务,网址 http://www.52jdhj.co
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值