KindEditor富文本框编辑器上传图片功能实现,基于java项目

1. HTML标签与jquery代码

<textarea id="editor_id" style="width: 200px; height: 200px;"></textarea>

<script type="text/javascript" src="../js/jquery.min.js"></script>
<script type="text/javascript" src="../kindeditor4.1.11/kindeditor-all.js"></script>
<script type="text/javascript" src="../kindeditor/kindeditor4.1.11/lang/zh-CN.js"></script>

<script type="text/javascript">
// 编辑富文本框
KindEditor.ready(function(K) {
var editor = K.create('#editor_id', {
themeType : "simple",
uploadJson : CONTEXT_PATH + "transportations/describe/upload",
resizeType : 1,
imageTabIndex : 1,
filterMode : true,
allowPreviewEmoticons : false,
allowImageUpload : true,
allowFileManager : true,
afterBlur : function() {
this.sync();
},
afterUpload : function(url) {
//上传图片后的代码
var image = "<img src='"+url+"'/>";
insertHtmlAtCaret(image);
},
items : [ 'source', 'undo', 'redo', 'plainpaste', 'wordpaste', 'clearhtml', 'quickformat', 'selectall', 'fullscreen', 'fontname', 'fontsize', '|', 'forecolor',
'hilitecolor', 'bold', 'italic', 'underline', 'hr', 'removeformat', '|', 'justifyleft', 'justifycenter', 'justifyright', 'insertorderedlist',
'insertunorderedlist', '|', 'link', 'image', 'unlink', 'baidumap', 'emoticons' ]
});
});

// 在光标处添加内容
function insertHtmlAtCaret(html) {
var sel, range;
if (window.getSelection) {
sel = window.getSelection();
if (sel.getRangeAt && sel.rangeCount) {
range = sel.getRangeAt(0);
range.deleteContents();
var el = document.createElement("textarea");
el.innerHTML = html;
var frag = document.createDocumentFragment(), node, lastNode;
while ((node = el.firstChild)) {
lastNode = frag.appendChild(node);
}
range.insertNode(frag);
if (lastNode) {
range = range.cloneRange();
range.setStartAfter(lastNode);
range.collapse(true);
sel.removeAllRanges();
sel.addRange(range);
}
}
} else if (document.selection && document.selection.type != "Control") {
document.selection.createRange().pasteHTML(html);
}
}
</script>

2. java后台实现

/**
*
* 富文本框编辑-上传图片
*
* @param localUrl
* @return
* @throws IOException
* @throws FileUploadException
*/
@RequestMapping(value = "upload")
public void uploadImg(HttpServletRequest request, HttpServletResponse response)
{
// 设置Response响应的编码
response.setContentType("text/html; charset=UTF-8");

// 获取一个Response的Write对象
PrintWriter writer = null;

try
{
writer = response.getWriter();

// 文件保存目录路径
String savePath = request.getServletContext().getRealPath("/") + "attached/";

// 文件保存目录URL
String saveUrl = request.getContextPath() + "/attached/";

// 定义允许上传的文件扩展名
HashMap<String, String> extMap = new HashMap<String, String>();
extMap.put("image", "gif,jpg,jpeg,png,bmp");

// 最大文件大小
long maxSize = 1000000;

// 判断是否是一个文件
if (!ServletFileUpload.isMultipartContent(request))
{
writer.println(getError("请选择文件。"));
return;
}

// 检查目录upload, 没有则创建一个
File uploadDir = new File(savePath);
if (!uploadDir.isDirectory())
{
uploadDir.mkdirs();
}

// 检查目录写权限
if (!uploadDir.canWrite())
{
writer.println(getError("上传目录没有写权限。"));
return;
}

String dirName = request.getParameter("dir");
if (dirName == null)
{
dirName = "image";
}
if (!extMap.containsKey(dirName))
{
writer.println(getError("目录名不正确。"));
return;
}

// 创建文件夹
savePath += dirName + "/";
saveUrl += dirName + "/";
File saveDirFile = new File(savePath);
if (!saveDirFile.exists())
{
saveDirFile.mkdirs();
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
String ymd = sdf.format(new Date());
savePath += ymd + "/";
saveUrl += ymd + "/";
File dirFile = new File(savePath);
if (!dirFile.exists())
{
dirFile.mkdirs();
}

DefaultMultipartHttpServletRequest servletRequest = (DefaultMultipartHttpServletRequest) request;
Iterator<String> iterator = servletRequest.getFileNames();
while (iterator.hasNext())
{
MultipartFile file = servletRequest.getFile(iterator.next());
String fileName = file.getOriginalFilename();

// 检查文件大小
if (file.getSize() > maxSize)
{
writer.println(getError("上传文件大小超过限制。"));
return;
}

// 检查扩展名
String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
if (!Arrays.<String> asList(extMap.get(dirName).split(",")).contains(fileExt))
{
writer.println(getError("上传文件扩展名是不允许的扩展名。\n只允许" + extMap.get(dirName) + "格式。"));
return;
}

// 以时间重新命名文件名
String newFileName = CommonUtils.newFileName(fileName);

File uploadedFile = new File(savePath, newFileName);
file.transferTo(uploadedFile);

JSONObject obj = new JSONObject();
obj.put("error", 0);
obj.put("url", saveUrl + newFileName);

writer.println(obj.toJSONString());
}
}
catch (Exception e)
{
logger.error("上传文件失败!" + e.getMessage());
}
finally
{
// 将writer对象中的内容输出
writer.flush();
// 关闭writer对象
writer.close();
}
}

/**
*
* 上传图片-响应错误信息
*
* @author 戴飞
* @param message
* @return
*/
private String getError(String message)
{
JSONObject obj = new JSONObject();
obj.put("error", 1);
obj.put("message", message);

return obj.toJSONString();
}

关于KindEditor编辑器,了解更多请参考官网文档;

转载于:https://www.cnblogs.com/df-blog/p/10275281.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 首先,在 `application\extra` 目录下新建一个 `config.php` 文件,添加以下配置: ```php <?php return [ 'upload_path' => '/uploads/', //上传文件保存的路径 'upload_exts' => 'gif,jpg,jpeg,png,bmp', //允许上传的文件类型 ]; ``` 2. 在 `application\index\controller` 目录下新建一个 `Upload.php` 控制器,添加以下代码: ```php <?php namespace app\index\controller; use think\Controller; use think\Request; class Upload extends Controller { public function uploadImage() { $file = request()->file('imgFile'); $info = $file->validate(['ext' => config('upload_exts')])->move(ROOT_PATH . 'public' . config('upload_path')); if ($info) { $image_url = config('upload_path') . $info->getSaveName(); return json(['error' => 0, 'url' => $image_url]); } else { return json(['error' => 1, 'message' => $file->getError()]); } } } ``` 3. 在 `application\index\view` 目录下新建一个 `upload_image.html` 文件,添加以下代码: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>上传图片</title> </head> <body> <form action="<?php echo url('upload/uploadImage'); ?>" enctype="multipart/form-data" method="post"> <input type="file" name="imgFile"> <input type="submit" value="上传"> </form> </body> </html> ``` 4. 修改 `kindeditor` 配置文件 `public\static\kindeditor\config.js`,添加以下代码: ```javascript //上传图片配置 imageUploadJson = '<?php echo url("upload/uploadImage"); ?>'; ``` 5. 在 `public\static\kindeditor\plugins` 目录下新建一个 `image.php` 文件,添加以下代码: ```php <?php //获取上传文件保存的路径 $save_path = $_SERVER['DOCUMENT_ROOT'] . $_POST['save_path']; //获取要上传的文件 $file = $_FILES['imgFile']; //上传文件 if (move_uploaded_file($file['tmp_name'], $save_path . $file['name'])) { $image_url = $_POST['base_url'] . $_POST['save_path'] . $file['name']; //返回上传结果 echo json_encode(['error' => 0, 'url' => $image_url]); } else { echo json_encode(['error' => 1, 'message' => '上传失败']); } ``` 6. 修改 `kindeditor` 的 `php` 上传文件处理程序 `public\static\kindeditor\php\upload_json.php`,添加以下代码: ```php //获取要保存的文件路径和文件名 $save_path = $_SERVER['DOCUMENT_ROOT'] . $_POST['save_path']; $file_name = uniqid() . strrchr($_FILES['imgFile']['name'], '.'); //上传文件 if (move_uploaded_file($_FILES['imgFile']['tmp_name'], $save_path . $file_name)) { $image_url = $_POST['base_url'] . $_POST['save_path'] . $file_name; //返回上传结果 echo json_encode(['error' => 0, 'url' => $image_url]); } else { echo json_encode(['error' => 1, 'message' => '上传失败']); } ``` 7. 在浏览器中访问 `http://localhost/index/upload_image.html`,上传一张图片测试。如果上传成功,会返回图片的 URL 地址。在 `kindeditor` 中也可以正常上传图片了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值