FCK技巧

一、js修改FCK上传的图片太小

FCK上传的图片太小或者太大,用户自己不想重新调整大小,可以在代码控制大小,让宽度固定,高度随原先的比例缩小或者放大,

注:这种方法只能改变图片显示时的宽、高大小,图片原来几KB,在服务器存储的就是几KB

在fckeditor/editor/dialog/fck_image/fck_image.js

找到

GetE('txtWidth').value = oImageOriginal.width ;
GetE('txtHeight').value = oImageOriginal.height ; 



if ( oImageOriginal.width < 300 ) {
   GetE('txtWidth').value = oImageOriginal.width ;
   GetE('txtHeight').value = oImageOriginal.height ;
} else {
   GetE('txtWidth').value = 300 ;
   GetE('txtHeight').value = 300 * oImageOriginal.height / oImageOriginal.width ;

}

二、编辑器上传文件时出现invalid Request问题解决!

在fckconfig.js中找到FCKConfig.LinkBrowseURL将其后面改为:
FCKConfig.LinkBrowserURL = FCKConfig.BasePath + 'filemanager/browser/default/browser.html?Type=File&Connector=' + encodeURIComponent( FCKConfig.BasePath + 'filemanager/connectors/' + _FileBrowserLanguage + '/connector.' + _FileBrowserExtension ) ;

即增加了"?Type=File",同样,找到FCKConfig.LinkUploadURL修改为
FCKConfig.LinkUploadURL = FCKConfig.BasePath + 'filemanager/connectors/' + _QuickUploadLanguage + '/upload.'
 + _QuickUploadExtension+'?Type=File' ;

三、上传所有东西重命名

FCKeditor 的文件上传默认是不改名的,本地的文件名是什么,上传后保留原来的文件名;如果存在同名文件,则会被自动在文件名后面加 (n) 来标识。

FCKeditor For ASP.NET 的上传部分被编译到 DLL 文件里面了,所以只能通过修改源代码,再重新编译后方能使用。

使用:FCKeditor.Net_2.6.3.zip,asp.net 2.0版

找到项目中的FileBrowser/FileWorkerBase.cs

while ( true )
            {
                string sFilePath = System.IO.Path.Combine( sServerDir, sFileName );

                if ( System.IO.File.Exists( sFilePath ) )
                {
                    iCounter++;
                    sFileName =
                        System.IO.Path.GetFileNameWithoutExtension( oFile.FileName ) +
                        "(" + iCounter + ")." +
                        sExtension;

                    iErrorNumber = 201;
                }
                else
                {
                    oFile.SaveAs( sFilePath );
                    break;
                }
            }

 

修改后的代码变成:

 

 

                while (true)
                {
                    sFileName = DateTime.Now.ToString("yyyymmddhhmmss", System.Globalization.DateTimeFormatInfo.InvariantInfo) + "." + sExtension;//以时间命名文件

                    string sFilePath = System.IO.Path.Combine(sServerDir, sFileName);

                    oFile.SaveAs(sFilePath);
                    break;
                }

 

重新生成解决方案。在网站项目中删除旧的FredCK.FCKeditorV2.dll,再添加新的引用,就OK了。

 

四、上传图片带水印

 

在看代码之前先简单的介绍一下我的想法。我在自己的网站中建立了H2Blog.config文件,用于存放网站的一些配置信息,如水印的类型(文字 型,图片型),是否需要加水印,文字型水印的文字内容等等和本文无关的重要配置信息。所以在如下带代码中,有一段是用来读取这些配置信息的。
在FileUpload方法中找到oFile.SaveAs( sFilePath );语句。在其后加入

 

 

                    try
                    {
                        DataSet configds = new DataSet();   //新建一个数据集实例
                        configds.ReadXml(Server.MapPath("~/H2Blog.config"));   //获得配置信息
                        DataTable configdt = configds.Tables[0];    //将数据装入表中
                        if (configdt.Rows[0]["Watermarkstatus"].ToString() == "0")  //如果水印状态信息为默认加水印的话
                        {
                            Image img = Image.FromFile(sFilePath);  //获得上传的图片文件
                            if (configdt.Rows[0]["Watermarktype"].ToString() == "0")    //如果水印类型为文字型
                            {
                                Graphics g = Graphics.FromImage(img);
                                g.DrawImage(img, 0, 0, img.Width, img.Height);
                                Font f = new Font("黑体", 20);
                                Brush b = new SolidBrush(Color.White);
                                string addText = configdt.Rows[0]["Watermarktext"].ToString();  //文件型水印的文字内容
                                g.DrawString(addText, f, b, img.Width - 150, img.Height - 35);  //在图片上显示的坐标,这个我只能写死,不知道有没有更好的办法
                                g.Dispose();
                            }
                            if (configdt.Rows[0]["Watermarktype"].ToString() == "1")    //如果水印类型为文字型
                            {
                                System.Drawing.Image copyImage = System.Drawing.Image.FromFile(Server.MapPath("~/Images/watermark/watermark.gif"));
                                Graphics g = Graphics.FromImage(img);
                                g.DrawImage(copyImage, new Rectangle(img.Width - copyImage.Width, img.Height - copyImage.Height, copyImage.Width, copyImage.Height), 0, 0, copyImage.Width, copyImage.Height, GraphicsUnit.Pixel);
                                g.Dispose();
                            }
                            sFileName = System.IO.Path.GetFileNameWithoutExtension(oFile.FileName); //获得源文件名
                            string newPath = DateTime.Now.ToString("yyyymmddhhmmss", System.Globalization.DateTimeFormatInfo.InvariantInfo) + "." + sExtension; //以时间命名文件
                            sFileName = newPath;
                            newPath = System.IO.Path.Combine(sServerDir, newPath);  //组合地址
                            img.Save(newPath);  //保存加水印后图片
                            img.Dispose();
                            if (File.Exists(sFilePath))
                            {
                                File.Delete(sFilePath); //删除没上水印的老图
                            }
                        }
                    }
                    catch
                    {
                        this.SendFileUploadResponse(808, isQuickUpload);    //如果出错,没这一句的话,就没有报错了,只能看到一直要求你等待的状态
                    }

你可能感兴趣的:(String,image,fckeditor,File,asp.net,dataset)