zoukankan      html  css  js  c++  java
  • ASp.net下 fckeditor 配置图片上传最简单的方法

     fckeditor 的基本配置我就不讲了,讲讲图片上传这块吧;

     1. 原先的配置

         把 fckeditor/filemanager/connectors 目录删除;

         有同学可能会问了,都删除了怎么上传文件?

         呵呵。。。

    2. 不要引用 FredCK.FCKeditorV2.dll;

        因为我都是采用js写的,不采用控件的方式;

        其实网上有很多人在尝试往 fckeditor/filemanager/connectors目录下注入,

        确实也有人不小心直接把FCK编辑器没有任何配置的情况下传到网上导致中招了;

    3. 现在讲正题吧,一般来说我们用FCK的时候并不多,在一个系统里面可能也就几个地方

        现在假如我有一个简单的系统,里面有“新闻”发布和,类似“公司简介”单页发布两个地方要用的FCK

        我要把所有文章的图片放到 /Article/yyyyMMdd/guid.jpg

        把所有单页的图片放到 /Page/yyyyMMdd/guid.jpg

        或者说我要把图片按用户存到不同的地方。。。

    4.实现

       怎么很简单的事情要说清楚需要做这么多铺垫,太麻烦了。。。。!!!

      

       web页面:

    代码
     <form id="form1" runat="server">
        
    <div>
            
    <div>
                
    <asp:TextBox ID="TextBox1" TextMode="MultiLine" runat="server"> </asp:TextBox>
            
    </div>
            
    <br />
            
    <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
        
    </div>
        
    </form>

       

          JS:

         

    代码

        
    <script src="fckeditor/fckeditor.js" type="text/javascript"></script>

        
    <script type="text/javascript">

            window.onload 
    = function() {
                
    var oFCKeditor = new FCKeditor('<%= TextBox1.ClientID %>');
                oFCKeditor.BasePath 
    = 'fckeditor/'
                
    oFCKeditor.Config.ImageUploadURL = "/admin/auploader.aspx";
                oFCKeditor.ReplaceTextarea();
            }
        
    </script>

    这样就搞定了!

    不要不相信啊,下面把上传页面的代码简单的写一个吧,对这个也比较重要;

    代码
     protected void Page_Load(object sender, EventArgs e)
        {
            
    if (Request.Files.Count > 0)
            {
                HttpPostedFile file 
    = Request.Files[0];
                string path 
    = "/Article/" + System.DateTime.Now.ToString("yyyyMMdd"+ "/";
                string serverPath 
    = Server.MapPath(path);
                string fileName 
    = Guid.NewGuid() + file.FileName.Substring(file.FileName.LastIndexOf("."));

                
    if (!System.IO.Directory.Exists(serverPath))
                    System.IO.Directory.CreateDirectory(serverPath);
                file.SaveAs(serverPath 
    + fileName);
                SendFileUploadResponse(
    0, path + fileName, fileName, "上传成功!");
            }
            
    else
            {
                SendFileUploadResponse(
    1"""""上传失败!");
            }
        }


        public 
    void SendFileUploadResponse(int isSucceed, string fileUrl, string fileName, string customMsg)
        {
            System.Web.HttpContext.Current.Response.Clear();
            System.Web.HttpContext.Current.Response.Write(
    "<script type='text/javascript'>");
            System.Web.HttpContext.Current.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;}}})();");
            System.Web.HttpContext.Current.Response.Write(
    "window.parent.OnUploadCompleted(" + isSucceed.ToString().ToLower() + ", '" + fileUrl + "', '" + fileName + "', '" + customMsg + "');");
            System.Web.HttpContext.Current.Response.Write(
    "</script>");
            System.Web.HttpContext.Current.Response.End();
        }

    好了搞定了!

    这个上传代码没有做严格的后缀限制,大小限制;因为这个页面路径是我们自己配置的嘛,想怎么写就怎么写了;

    甚至你可以根据不同的用户存到不同的地方;

    这里需要说明一下 SendFileUploadResponse 方法,其实就是为FCk传回消息;

    这里:

     System.Web.HttpContext.Current.Response.Write("window.parent.OnUploadCompleted(" + isSucceed.ToString().ToLower() + ", '" + fileUrl + "', '" + fileName + "', '" + customMsg + "');");

     

    对应的是

    fckeditor/dialog/fck_image/fck_image.js

     

    代码
    function OnUploadCompleted( errorNumber, fileUrl, fileName, customMsg )
    {
        
    // Remove animation
        window.parent.Throbber.Hide() ;
        GetE( 
    'divUpload' ).style.display  = '' ;

        
    switch ( errorNumber )
        {
            
    case 0 :    // No errors
                alert( 'Your file has been successfully uploaded' ) ;
                
    break ;
            
    case 1 :    // Custom error
                alert( customMsg ) ;
                
    return ;
            
    case 101 :    // Custom warning
                alert( customMsg ) ;
                
    break ;
            
    case 201 :
                alert( 
    'A file with the same name is already available. The uploaded file has been renamed to "' + fileName + '"' ) ;
                
    break ;
            
    case 202 :
                alert( 
    'Invalid file type' ) ;
                
    return ;
            
    case 203 :
                alert( 
    "Security error. You probably don't have enough permissions to upload. Please check your server." ) ;
                
    return ;
            
    case 500 :
                alert( 
    'The connector is disabled' ) ;
                
    break ;
            
    default :
                alert( 
    'Error on file upload. Error number: ' + errorNumber ) ;
                
    return ;
        }

        sActualBrowser 
    = '' ;
        SetUrl( fileUrl ) ;
        GetE(
    'frmUpload').reset() ;
    }

    注意到 0 ,是成功,1 是失败,其他的自己看吧。。。。

    对了说明一下这里用的是 2.65 版本测试的,如果有其他版本不一样的灵活变通下哈;

     

    总结一下:

    1. 在不同的页面配置不同的图片处理路径,如:

         oFCKeditor.Config.ImageUploadURL = "/admin/aupload.aspx";

         oFCKeditor.Config.ImageUploadURL = "/admin/bupload.aspx";

         。。。。

     

    2. FCk 会把图片post到指定的路径,

         然后你自己操作图片,按目录存啊还是按当前用户session存随便来;

         当然别忘记验证用户的身份在先,没有权限的不要对他客气,直接返回错误,

         验证身份示例代码里面没写,自己根据项目自己加吧

     

    3. 一定要返回值告诉FCK你的操作结果,否则会一直死在那里的。。。

        

    PS:

    看来我不是个喜欢写东西的人,觉得很麻烦。。。

    总之第一篇博客就这样了,呵呵

     

     Demo 下载

  • 相关阅读:
    SDUT 2143 图结构练习——最短路径 SPFA模板,方便以后用。。 Anti
    SDUT ACM 1002 Biorhythms 中国剩余定理 Anti
    nyist OJ 119 士兵杀敌(三) RMQ问题 Anti
    SDUT ACM 2157 Greatest Number Anti
    SDUT ACM 2622 最短路径 二维SPFA启蒙题。。 Anti
    二叉索引树 区间信息的维护与查询 Anti
    SDUT ACM 2600 子节点计数 Anti
    UVA 1428 Ping pong 二叉索引树标准用法 Anti
    2010圣诞Google首页效果
    Object
  • 原文地址:https://www.cnblogs.com/zhanxp/p/1644499.html
Copyright © 2011-2022 走看看