08
2012
05

FCKEditor上传文件时,不知自动生成文件名,而是原来的文件名

FCKEditor 是一款非常优秀的 HTML 在线文本编辑器,功能完善,支持多种浏览器,支持多种开发语言,开放的功能接口,是目前网络上最流行的编辑器之一,被很多网站采用。

这个文本编辑器对于使用Asp.Net的朋友是很好用的,因为好多功能都可以自己编辑,自己修改,需要下载FCKEditor 2.63等版本的源码,修改后直接生成,引用dll就ok。今天找到了一个一篇文章,可以看看,可以自己学习修改一下:

1、首先修改 HTML 文件FCKeditor\editor\dialog\fck_image.html,给表单添加相关的html控件,这样,上传图片时,可选择是否添加水印与水印的放置位置。

2、从这里开始,就要修改FredCK.FCKeditorV2.vs2005这个项目的源代码了,这是FCKEditor专门支持 .NET 而提供的开源项目,使用 GPL 协议发布。

(1)、修改FCKeditor.Net_2.6.3\FileBrowser\FileWorkerBase.cs,这个类的作用是支持文件的浏览和上传。可在此获得 System.Web.HttpRequest 对象,其中就有用户Post 过来的数据,然后根据需要使用,比如自定义文件名,对图片进一步处理等。

(2)、添加FCKeditor.Net_2.6.3\ImageProcess.cs,这个类是我自己根据需求新增的,作用是对上传的图片进一步处理。里面有两个重要的方法,分别是:

方法一:给图片增加水印,使用的是 .NET 下的图片处理功能。

/// <summary>
/// 给图片增加水印。
/// </summary>
/// <param name="stream">上传的图片流</param>
/// <param name="path">保存到的路径</param>
/// <param name="waterMarkUrl">水印地址</param>
/// <param name="corner">水印角落,如:左上角</param>
public static void AddWatermarkToImg(System.IO.Stream stream, string path, string waterMarkUrl, string corner)

方法二:该方法可以生成各种大小图片的缩略图功能,以方便在需要不同大小的页面调用。

/// <summary>
/// 生成等比缩略图
/// </summary>
/// <param name="largeImagePhysicsPath">要生成缩略图图片的物理路径,如E:\UploadImage\200811\1\221725924.jpg</param>
/// <param name="thumbnailImagePhysicsPath">生成缩略图的物理路径,如E:\SmallImage\200811\1\221725924.jpg</param>
/// <param name="fileName">原图的文件名 221725924.jpg</param>
/// <param name="smallFileName">缩略图文件名 221725924.jpg</param>
/// <param name="width">缩略图宽</param>
/// <param name="height">缩略图高</param>
/// <returns></returns>
public static void ThumbnailImage(string largeImagePhysicsPath, string thumbnailImagePhysicsPath, string fileName, string smallFileName, int width, int height)

由于各种原因代码我就不贴了,请见谅。

还有一点就是,用 IE 上传文件后无法返回,显示“没有权限”,实际上文件已经上传成功,用 FF 是可以顺利返回。估计是 IE对 javascript 脚本的document.domain 处理比较严格吧。

解决方法:修改FCKeditor.Net_2.6.3\FileBrowser\FileWorkerBase.cs,注释以下一行即可。

Response.Write( @"(function(){var d=document.domain;while (true){try{var A=window.top.opener.document.domain;break;}catch(e) {};d=d.replace(/.*?(?:\.|$)/,'');if (d.length==0) break;try{document.domain=d;}catch (e){break;}}})();" );

« 上一篇下一篇 »

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。