zoukankan      html  css  js  c++  java
  • 如何用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;
        }
  • 相关阅读:
    nginx upstream permission denied错误解决
    基于Mariadb 10.6.4在CentOS 7环境下配置Galera Cluster集群
    K8s 开始
    RTSP H264/HEVC 流 Wasm 播放
    Netty编码示例(RPC & WbeSocket & Tomcat)
    Netty异步任务调度与异步线程池
    Netty编解码器&TCP粘包拆包
    Netty核心模块组件
    Neety编码示例(群聊系统&⼼跳检测&WebSocket⻓连接)
    Netty高性能架构设计
  • 原文地址:https://www.cnblogs.com/masahiro/p/10128853.html
Copyright © 2011-2022 走看看