以前在UEditor群里经常看到人家问图片上传怎么搞,其实很简单,UEditor已经自带了一个例子了,任何一个合格的程序员都可以写成别的语言。问ASP.NET的人居多,估计都是学生,看不懂php的代码,当然也没办法自己写.NET版了。

今天我尝试了下最新的1.1.7开发版,它的图片上传功能已经和1.1.6不一样了,现在用的是Flash多图片上传,当然,后台还是要有服务器端程序支持的。截至目前,网上还没有针对1.1.7图片上传的文献,我只能自己写了一个,目前测试下来没什么问题,所以把代码发上来分享给大家。

首先,打开VisualStudio,在ueditor\server\upload\net下建立一个空的ASP.NET页面,叫做up.aspx,然后把它的前台代码删光,只留一句:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="up.aspx.cs" Inherits="ueditor_server_upload_net_up" %>

这是为了保证上传成功后Response.Write()出来的东西不会受到无用代码的影响。(以前手工做AJAX的时候就是这么干的,还记得么?)

然后,核心代码是Up.aspx.cs:我懒,代码写的比较丑陋,反正也只有自己看,无所谓了,高手莫笑。

这里上传路径是网站根目录下的Uploads文件夹。UEditor文件夹和他平行,也在网站根目录下。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.IO;
using WYJ.Web.Utils;
 
public partial class ueditor_server_upload_net_up : System.Web.UI.Page
{
 
    string uploadPath = "Uploads";   //保存路径
    string fileType = ".jpg,.jpeg,.gif,.png,.bmp";   //文件允许格式
    int fileSize = 2048;    //文件大小限制,单位KB
    string state = "SUCCESS";
 
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            HttpPostedFile oFile = Request.Files[0];
            string fileExtension = System.IO.Path.GetExtension(oFile.FileName).ToLower();
            if (fileType.ToLower().IndexOf(fileExtension) > -1)//检测是否为允许的上传文件类型
            {
                if (this.fileSize * 1024 >= oFile.ContentLength)
                {
                    try
                    {
                        string DirectoryPath;
                        // 取消下面注释按文件夹归档储存
                        //DirectoryPath = uploadPath + DateTime.Now.ToString("yyyy-MM");
                        DirectoryPath = uploadPath;
                        string sFileName = DateTime.Now.ToString("yyyyMMddHHmmssffff");  //文件名称
                        string FullPath = "~/" + DirectoryPath + "/" + sFileName + fileExtension;//最终文件路径
                        if (!Directory.Exists(Server.MapPath("~/" + DirectoryPath)))
                            Directory.CreateDirectory(Server.MapPath("~/" + DirectoryPath));
                        oFile.SaveAs(Server.MapPath(FullPath));
                        //Response.Write("parent.reloadImg(‘" + Page.ResolveUrl(FullPath) + "‘);" + "location.href=‘upload.aspx?url=" + Page.ResolveUrl(FullPath) + "‘;");
 
                        string retPath = "/" + DirectoryPath + "/" + sFileName + fileExtension;
 
                        Response.Write("{‘url‘:‘" + retPath + "‘,‘title‘:‘" + sFileName + "‘,‘state‘:‘" + state + "‘}");
 
                    }
                    catch (Exception ex)
                    {
 
                        MessageBox.ShowAndRedirect(this, "上传文件失败。" + ex.Message, "upload.aspx");
                    }
                }
                else
                {
                    MessageBox.ShowAndRedirect(this, "上传文件大小超过限制。", "upload.aspx");
                }
            }
            else
            {
                MessageBox.ShowAndRedirect(this, "上传文件扩展名是不允许的扩展名。", "upload.aspx");
            }
        }
    }
 
    public string Filter(string Url)
    {
        Url = Url.Replace("&", "&");
        Url = Url.Replace("‘", "&qpos;");
        Url = Url.Replace("\"", """);
        Url = Url.Replace("<", "<");
        Url = Url.Replace(">", ">");
        return Url;
    }
}

补充一点:我偷懒了,没用Filter函数。但已经给大家写好了。留个小题给大家,大家可以对照着UEditor给的其他实例,把这个函数加到正确的位置上。

然后,在ueditor\dialogs\image\image.html中,修改上传处理页面的地址为我们的up.aspx。大约是155行左右。

url:"../../server/upload/net/up.aspx"

最后,如上图所示,有个很坑爹的地方一定要改掉:在ueditor\dialogs\image下的image.html中,有个insertBatch()函数,大概在256行左右。记得把它原来自带的修正地址数据改成如图所示的样子。不然你的url之前总会多“。。/server/upload”这样的字符串,显然不是我们的真实路径。

OK,大功告成。