asp.net core 引用ckeditor编辑器
网页
<script src="~/ckeditor/ckeditor.js"></script>
<script src="~/ckeditor/config.js"></script>
<textarea id="editor"></textarea>
<table class="tblno">
<tr>
<td>
<font color="#999999">安全插入任意文件:</font>
</td>
<td>
<iframe id="Iframe1" src="/sysadmins/upload/upload_editor?savefold=/UpLoadFiels/editor/&txtname=editor"
frameborder="0" scrolling="no" height="25"></iframe>
</td>
<td>
<font color="#999999">按Ctrl键上传多个文件</font>
</td>
</tr>
</table>
<style>
#editor img {
max-width: 600px !important;
}
</style>
<script>
CKEDITOR.replace('editor', {
filebrowserImageUploadUrl: '/api/UploadPic/UploadImage', // 图片上传
// filebrowserBrowseUrl: '/api/UploadPic/UploadImage', // 浏览文件
filebrowserUploadUrl: '/api/UploadPic/UploadFile', // 文件上传
linkUploadUrl: '/api/UploadPic/UploadFile', // 处理链接上传的 API
extraPlugins: 'uploadimage',
height: "350",
imageUploadUrl: '/api/UploadPic/UploadImage',
});
</script>文件上传接口
using Masuit.Tools;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Runtime.InteropServices.JavaScript.JSType;
namespace xxtsoft.Application.Manage
{
[ApiDescriptionSettings("05编辑器文件上传")]
[Route("api/[controller]")]
[ApiController]
//登录判断
[Authorize]
public class UploadPic : ControllerBase
{
private readonly SqlSugar.ISqlSugarClient _db;
public UploadPic(ISqlSugarClient db)
{
this._db = db;
}
[HttpPost("UploadImage")]
[NonUnify]
public async Task<object> UploadImage(IFormFile upload)
{
if (upload == null || upload.Length == 0)
return "{\"uploaded\": 0,\"error\": {\"message\": \"无法保存文件\"}}";
var upfilename = "";//上传文件名
#region 检测图片格式
var validMimeTypes = new[] { "image/jpeg", "image/png", "image/gif" };
if (!validMimeTypes.Contains(upload.ContentType.ToLowerInvariant()))
{
return "{\"uploaded\": 0,\"error\": {\"message\": \"请上传图片格式\"}}";
}
#endregion
#region 上传文件及路径
//上传路径
var filepath = "/upLoadfiels/";
filepath += DateTime.Now.ToString("yyyy-MM") + "/";
#endregion
#region 保存文件
var ext = Path.GetExtension(upload.FileName);
//检测文件是否合法
var filename = RandomHelper.GetGuid() + ext;//文件名
var thispath = Path.Combine(App.WebHostEnvironment.WebRootPath + filepath, filename); //当前上传文件应存放的位置item.FileName
upfilename += filepath + filename; //上传后的文件路径名
//FileHelper.FileAdd("1.txt", upfilename + "\r\n");
//目录不存在,创建目录
if (!Directory.Exists(App.WebHostEnvironment.WebRootPath + filepath))
{
Directory.CreateDirectory(App.WebHostEnvironment.WebRootPath + filepath);
}
//上传文件
using (var stream = new FileStream(thispath, FileMode.Create)) //创建特定名称的文件流
{
try
{
await upload.CopyToAsync(stream);//上传文件
//上传日志
}
catch (Exception ex) //上传异常处理
{
//throw new Exception(ex.ToString());
return "{\"uploaded\": 0,\"error\": {\"message\": \"图片无法保存\"}}";
}
}
#endregion
#region 日志文件
var originalfilename = upload.FileName;
var createname = filepath + filename;
var type = Path.GetExtension(upload.FileName);
var username = App.HttpContext.User.Identity.Name;
var filesize = upload.Length;
await _db.InsertableByDynamic(
new
{
originalfilename = originalfilename,
createname = createname,
type = type,
filesize = filesize,
username = username
})
.AS("pub_uploadfile")
.ExecuteCommandAsync();
#endregion
return "{\"uploaded\":1,\"url\":\"" + upfilename + "\",\"width\":\"auto\",\"height\":\"auto\"}";
}
[HttpPost("UploadFile")]
[NonUnify]
public async Task<object> UploadFile(IFormFile upload)
{
if (upload == null || upload.Length == 0)
return "{\"uploaded\": 0,\"error\": {\"message\": \"无法保存文件\"}}";
var upfilename = "";//上传文件名
#region 上传文件及路径
//上传路径
var filepath = "/upLoadfiels/";
filepath += DateTime.Now.ToString("yyyy-MM") + "/";
#endregion
#region 保存文件
var ext = Path.GetExtension(upload.FileName);
//检测文件是否合法
var filename = RandomHelper.GetGuid() + ext;//文件名
var thispath = Path.Combine(App.WebHostEnvironment.WebRootPath + filepath, filename); //当前上传文件应存放的位置item.FileName
upfilename += filepath + filename; //上传后的文件路径名
//FileHelper.FileAdd("1.txt", upfilename + "\r\n");
//目录不存在,创建目录
if (!Directory.Exists(App.WebHostEnvironment.WebRootPath + filepath))
{
Directory.CreateDirectory(App.WebHostEnvironment.WebRootPath + filepath);
}
//上传文件
using (var stream = new FileStream(thispath, FileMode.Create)) //创建特定名称的文件流
{
try
{
await upload.CopyToAsync(stream);//上传文件
//上传日志
}
catch (Exception ex) //上传异常处理
{
//throw new Exception(ex.ToString());
return "{\"uploaded\": 0,\"error\": {\"message\": \"图片无法保存\"}}";
}
}
#endregion
#region 日志文件
var originalfilename = upload.FileName;
var createname = filepath + filename;
var type = Path.GetExtension(upload.FileName);
var username = App.HttpContext.User.Identity.Name;
var filesize = upload.Length;
await _db.InsertableByDynamic(
new
{
originalfilename = originalfilename,
createname = createname,
type = type,
filesize = filesize,
username = username
})
.AS("pub_uploadfile")
.ExecuteCommandAsync();
#endregion
return "{\"uploaded\":1,\"url\":\"" + upfilename + "\",\"fileName\":\"2222222222\"}";
}
}
}插入文件html
@page
@model xxtsoft.Web.Entry.Pages.sysadmins.upload.upload_editorModel
@{
Layout = "_LayoutAdmin";
}
<style>
* {
margin: 0;
padding: 0;
font-size: 12px;
}
html{
background: unset;
}
</style>
<form method="post" enctype="multipart/form-data">
<div class="layui-form">
<div class="layui-form-item">
<div class="layui-input-group">
<input type="file" name="files" multiple placeholder="请选择">
<input type="hidden" name="savefold" value="@Model.savefold" />
<input type="hidden" name="txtname" value="@Model.txtname" />
<div class="layui-input-suffix">
<input class="layui-btn layui-btn-xs" type="submit" value="上传" />
</div>
</div>
</div>
</div>
</form>
@Html.Raw(Model.msgJs)插入文件C#
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Furion;
using xxtsoft.Common;
using System.Xml.Linq;
namespace xxtsoft.Web.Entry.Pages.sysadmins.upload
{
//登录判断
[Authorize]
public class upload_editorModel : PageModel
{
/// <summary>
/// 弹出js上传说明
/// </summary>
public string msgJs { get; set; }
/// <summary>
/// 保存的文件夹
/// </summary>
public string savefold { get; set; }
/// <summary>
/// 父input值
/// </summary>
public string txtname { get; set; }
private readonly SqlSugar.ISqlSugarClient _db;
public upload_editorModel(SqlSugar.ISqlSugarClient db)
{
this._db = db;
//_db.ChangeDatabase("1");
}
public void OnGet()
{
savefold = FunHelper.FilerForm(Request.Query["savefold"]);//过滤非法字符,存放路径文件夹
txtname = FunHelper.FilerForm(Request.Query["txtname"]);//上传input id
}
//上传文件是 post 方式,这里加不加都可以
public async Task<IActionResult> OnPostAsync(List<IFormFile> files)
{
savefold = FunHelper.FilerForm(Request.Form["savefold"]);
txtname = FunHelper.FilerForm(Request.Form["txtname"]);
var upfilename = "";//上传文件名
#region 上传文件及路径
//上传路径
var filepath = "";
if (!string.IsNullOrEmpty(savefold))
{
filepath += savefold;
}
else
{
filepath += "/upLoadfiels/";
}
filepath += DateTime.Now.ToString("yyyy-MM") + "/";
#endregion
string innerhtml = "";
foreach (var item in files) //上传选定的文件列表
{
if (item.Length > 0) //文件大小 0 才上传
{
#region 保存文件
var ext = Path.GetExtension(item.FileName);
//检测文件是否合法
//bool hf = UploadHelper.CheckFileExtends(ext.Replace(".", ""), UploadHelper.FileTpe.SoftType).Result;
////FileHelper.FileAdd(FileHelper.absoluteWebPath("1.txt"), hf + "\r\n");
//if (hf)
//{
// MessageHelper.ShowLocation("文件不合法");
// return Page();
//}
var filename = RandomHelper.GetGuid() + ext;//文件名
var thispath = Path.Combine(App.WebHostEnvironment.WebRootPath + filepath, filename); //当前上传文件应存放的位置item.FileName
upfilename += filepath + filename + "|"; //上传后的文件路径名
//目录不存在,创建目录
if (!Directory.Exists(App.WebHostEnvironment.WebRootPath + filepath))
{
Directory.CreateDirectory(App.WebHostEnvironment.WebRootPath + filepath);
}
//上传文件
using (var stream = new FileStream(thispath, FileMode.Create)) //创建特定名称的文件流
{
try
{
await item.CopyToAsync(stream);//上传文件
//上传日志
}
catch (Exception ex) //上传异常处理
{
throw new Exception(ex.ToString());
}
}
#endregion
#region 日志文件
var originalfilename = item.FileName;
var createname = filepath + filename;
var type = Path.GetExtension(item.FileName);
var username = User.Identity.Name;
var filesize = item.Length;
await _db.InsertableByDynamic(
new
{
originalfilename = originalfilename,
createname = createname,
type = type,
filesize = filesize,
username = username
})
.AS("pub_uploadfile")
.ExecuteCommandAsync();
#endregion
innerhtml += uploadfile(createname, type.Replace(".", ""), originalfilename);
}
}
upfilename = FunHelper.RepStrRight(upfilename, "|", "");
//弹出js
msgJs = "<script>parent.CKEDITOR.instances." + txtname + ".insertHtml('" + innerhtml + "');</script>";
return Page();
}
#region 获取文件上传格式
private string uploadfile(string pic, string orginfiletype, string orginfilename)
{
string Rn = "";
switch (orginfiletype.ToLower())
{
case "jpg":
case "gif":
case "bmp":
case "png":
Rn = "<center><a href=" + pic.Replace("s_", "") + " target=_blank><img src=" + pic + " border=0 /></a></center>";
break;
case "swf":
case "flv":
Rn = "<center><object classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" codebase=\"http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0\" height=\"800\" width=\"900\"><param name=\"quality\" value=\"high\" /><param name=\"movie\" value=\"" + pic + "\" /><embed height=\"800\" pluginspage=\"http://www.macromedia.com/go/getflashplayer\" quality=\"high\" src=\"" + pic + "\" type=\"application/x-shockwave-flash\" width=\"900\"></embed></object></center>";
// Rn += "<embed height=\"100px\" width=\"500px\" name=\"googlePlayer\" src=\"/icon/google-audio-player.swf?audioUrl=" + pic + "&autoPlay=true\" type=\"application/x-shockwave-flash\"/>";
break;
case "rm":
case "ram":
case "mp3":
Rn += "<embed height=\"100px\" width=\"500px\" name=\"googlePlayer\" src=\"/icon/google-audio-player.swf?audioUrl=" + pic + "&autoPlay=true\" type=\"application/x-shockwave-flash\"/>";
break;
case "mp4":
Rn = "<center><object id=player classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000 name=player width=800 height=600>";
Rn += " <param name=movie value=/templates/default/flash/player.swf?screencolor=#690601 />";
Rn += " <param name=allowfullscreen value=true />";
Rn += " <param name=allowscriptaccess value=always />";
Rn += " <param name=flashvars value=file=" + pic + "&image=/UpLoadFiels/flv.jpg />";
Rn += " <embed type=application/x-shockwave-flash id=player2 name=player2 src=/templates/default/flash/player.swf?screencolor=#690601 width=800 height=600 allowscriptaccess=always allowfullscreen=true flashvars=file=" + pic + "&image=/UpLoadFiels/flv.jpg />";
Rn += " </object>";
Rn += "</center>";
break;
case "wma":
case "wmv":
case "asf":
case "avi":
case "mpeg":
Rn += "<embed height=\"100px\" width=\"500px\" name=\"googlePlayer\" src=\"/icon/google-audio-player.swf?audioUrl=" + pic + "&autoPlay=true\" type=\"application/x-shockwave-flash\"/>";
break;
//case "xls":
//case "xlsx":
// Rn = "<a href=\"" + pic + "\">" + orginfilename + "</a>";
// break;
//case "doc":
//case "docx":
// Rn = "<a href=\"" + pic + "\">" + orginfilename + "</a>";
// break;
//case "ppt":
//case "pptx":
//case "ppsx":
// Rn = "<a href=\"" + pic + "\">" + orginfilename + "</a>";
// break;
//case "rar":
//case "zip":
// Rn = "<a href=\"" + pic + "\">" + orginfilename + "</a>";
// break;
//case "pdf":
// Rn = "<a href=\"" + pic + "\">" + orginfilename + "</a>";
// break;
//case "mdf":
//case "mdb":
// Rn = "<a href=\"" + pic + "\">" + orginfilename + "</a>";
// break;
//case "txt":
// Rn = "<a href=\"" + pic + "\">" + orginfilename + "</a>";
// break;
//case "chm":
// Rn = "<a href=\"" + pic + "\">" + orginfilename + "</a>";
// break;
default:
Rn = "<a href=\"" + pic + "\">" + orginfilename + "</a>";
break;
}
return Rn;
}
#endregion
}
}