C#+ckeidtor5实现图片上传

index.html

html 复制代码
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <title>CkEditor5</title>
    <style>
        html,
        body {
            width: 100%;
            height: 100%;
        }

        .editor-container {
            width: 100%;
            height: 100%;
        }

        #editor {
            width: 100%;
            height: 100%;
        }
    </style>
</head>
<body>
    <div class="editor-container">
        <textarea id="editor">
        <p>Hello World!</p>
    </textarea>
    </div>
    <script src="lib/ckeditor.js"></script>
    <script src="lib/translations/zh-cn.js"></script>
    <script>
        ClassicEditor.create(document.querySelector('#editor'), {
            licenseKey: 'GPL',
            language: 'zh-cn',
            simpleUpload: {
            	//同一个域名下可以不写
			    uploadUrl: '/Handler1.ashx',
			},
        })
            .then(editor => {
                window.editor = editor;
            })
            .catch(error => {
                console.error('There was a problem initializing the editor.', error);
            });
    </script>
</body>
</html>

后端接口如下

cs 复制代码
using System.IO;
using System.Linq;
using System.Web;

namespace CkEditorStu02
{
    /// <summary>
    /// Handler1 的摘要说明
    /// </summary>
    public class Handler1 : IHttpHandler
    {
        public string GetCurrentDomainName()
        {
            // 获取当前请求的协议(HTTP或HTTPS)
            string scheme = HttpContext.Current.Request.Url.Scheme;

            // 获取当前请求的主机名(包括端口号)
            string host = HttpContext.Current.Request.Url.Host;

            // 如果需要,可以在这里添加端口号
            int port = HttpContext.Current.Request.Url.Port;

            // 组合协议和主机名以形成完整的域名
            string domainName = scheme + "://" + host + ":" + port;

            return domainName;
        }

        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "application/json";
            context.Response.ContentEncoding = System.Text.Encoding.UTF8;
            context.Response.AppendHeader("Access-Control-Allow-Origin", "*"); // 允许来自任何域的请求
            context.Response.AppendHeader("Access-Control-Allow-Methods", "POST,OPTIONS,GET"); // 允许的请求方法
            context.Response.AppendHeader("Access-Control-Allow-Headers", "Content-Type"); // 允许的请求头

            var files = context.Request.Files;
            if (files == null || files.Count <= 0)
            {
                var result = $"{{\"error\": {{\"message\": \"文件不存在\"}}}}";
                context.Response.Write(result);
                return;
            }
            bool isLarge = false;
            string fileName = "";
            for (int i = 0; i < files.Count; i++)
            {
                var file = files[i];
                //判断文件大小
                //大小限制
                int maxSize = 1 * 1024 * 1024;  //最大是2M(转换为字节)
                if (file.ContentLength > maxSize)
                {
                    context.Response.Write($"{{\"error\": {{\"message\": \"上传文件大小超出限制\"}}}}");
                    return;
                }
                //扩展名限制
                string[] exts = { "image/jpg", "image/jpeg", "image/gif", "image/png" };
                if (!exts.Contains(file.ContentType.ToLower()))
                {
                    context.Response.Write("必须上传图片文件");
                    return;
                }
                fileName = Path.GetFileName(file.FileName);
                file.SaveAs(Path.Combine(context.Server.MapPath("~"), fileName));
                break;
            }
            var res = $"{{\"url\": \"{GetCurrentDomainName()}/{fileName}\"}}";
            //同一个域名下,下面的代码也可以
			//var res = $"{{\"url\": \"/{fileName}\"}}";
            context.Response.Write(res);
            /*
             成功:
            {
                "url": "https://example.com/images/foo.jpg"
            }
            失败:
            {
                "error": {
                    "message": "The image upload failed because the image was too big (max 1.5MB)."
                }
            }
             */
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}
相关推荐
周杰伦fans5 小时前
8GB显存下模型量化实战指南
人工智能·后端·c#
samble7 小时前
从零搭建灌装监控系统(十二):配置系统,原子写入与容错
c#·wpf·mvvm·modbus·工业控制
流形填表10 小时前
题库去重实战:基于题干指纹的重复题清理
开发语言·c#
开开心心就好16 小时前
以图搜图找重复图片,本地工具离线就能用
javascript·智能手机·ffmpeg·c#·ocr·word·音视频
QQ_216962909616 小时前
基于C#(Asp.net)电竞陪玩信息管理系统的设计与实现
java·大数据·spring boot·微信小程序·c#·云计算·asp.net
未来之窗软件服务1 天前
C# 截图源码支持自动保存-东方仙盟
c#·仙盟创梦ide·东方仙盟·电脑工具
UIU1142 天前
-7 / 2 在 C 里是 -3,在 Python 里是 -4,谁算错了?
c++·学习·c#
wflynn2 天前
GitHub 今日推荐|REDox:64 位 token 表示结构化数据,内存占用降 70% 支持多格式互转
开源·c#·github
驰骋工作流2 天前
C#/.NET 开源BPM工作流引擎6大常用对比选型分析驰骋BPM驰骋低代码低代码工作流引擎
开源·c#·.net
en.en..2 天前
C语言 fp与fd 区别详解
c#