summernote异步图片上传

2024-02-16 07:18

本文主要是介绍summernote异步图片上传,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

用summernote编辑器的好处是因为可以自适应,手机也可以自适应,很方便,编辑器本身也有自带的图片上传,不过不方便,还是自己写一个异步上传的方法

具体如下:

前端页面代码:

        <tr class="">
                  <td>沟通内容:</td>
                  <td><textarea class="form-control" id="summernote" name="content"  cols="60" rows="10"></textarea> </td>
        </tr>

js代码:

<script type="text/javascript">
    $(function(){
        $('#summernote').summernote({
              height: 300, //定义初始高度
              lang: 'zh-CN', // default: 'en-US'
              focus:true,
              toolbar: [
                 ['style', ['bold', 'italic', 'underline', 'clear']],
                 ['fontsize', ['fontsize']],
                 ['color', ['color']],
                 ['para', ['ul', 'ol', 'paragraph']],
                 ['height', ['height']],
                 ['insert', ['picture', 'video']]
               ],
              callbacks: {  
                    onImageUpload: function(files, editor, $editable) {  
                        sendFile(files[0],editor,$editable);  
                    }  
              }
        
        });
        
        function sendFile(file, editor, $editable){
            var filename = false;
            try{
                filename = file['name'];
            } catch(e){
                filename = false;
            }
            if(!filename){$(".note-alarm").remove();}
            //以上防止在图片在编辑器内拖拽引发第二次上传导致的提示错误
            var ext = filename.substr(filename.lastIndexOf("."));
            ext = ext.toUpperCase();// 验证图片类型
            var timestamp = new Date().getTime();
            var name = timestamp+"_"+$("#summernote").attr('aid')+ext;
            //name是文件名,自己随意定义,aid是我自己增加的属性用于区分文件用户
            data = new FormData();
            data.append("file", file);
            data.append("key",filename);
            data.append("token",$("#summernote").attr('token'));
            
            $.ajax({
                data: data,
                type: "POST",
                url: "${pageContext.request.contextPath}/admin/customerRecord_upload.do", //图片上传出来的url,返回的是图片上传后的路径,http格式
                contentType: false,
                cache: false,
                processData: false,
                success: function (data) {  
                    var path = data.data;
                    $('#summernote').summernote('insertImage', path, filename);
                    $("img").addClass("img-responsive center-block");
                },  
                error: function () {  
                    alert("上传失败!");  
                }  
            });
        }
    });
</script>

controller层的代码

@RequestMapping(value = "/customerRecord_upload", method = RequestMethod.POST)
    @ResponseBody
    public Map<String,Object> uploadHandle(HttpServletRequest request,HttpServletResponse  response){
        Map<String,Object> map = new HashMap<String,Object>(0);
        map.clear();
        
        MultipartFile multipartFile = null;
        // 转型为MultipartHttpRequest:
        if(request instanceof MultipartHttpServletRequest){
            
            MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
            // 获取对应file对象
            Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
            Iterator<String> fileIterator = multipartRequest.getFileNames();
            while (fileIterator.hasNext()) {
                String fileKey = fileIterator.next();
                // 获取对应文件
                multipartFile = fileMap.get(fileKey);
                if (multipartFile.getSize() != 0L) {
                    // 日期目录
                    String imageDir = "admin/upload/customerRecord/" + DateUtil.dateToString(new Date(), "yyyyMMdd");
                    String realPath = request.getSession().getServletContext().getRealPath(imageDir);
                    File dir = new File(realPath);
                    if (!dir.exists()) {
                        dir.mkdirs();
                    }
                    // 获取上传文件原始名称
                    String fileName = multipartFile.getOriginalFilename();
                    // 获取文件的扩展名
                    String ext = fileName.substring(fileName.lastIndexOf("."));
                    String tmpExt = ext.toLowerCase(); // 验证图片类型
                    if (!tmpExt.contains(".jpg") && !tmpExt.contains(".gif") && !tmpExt.contains(".png") && !tmpExt.contains(".jpeg")) {
                        map.put("msg", "只能上传jpg、gif、png类型的图片。");
                        map.put("data", "");
                        return map;
                    }
                    // 重新给文件命名
                    String banName = String.valueOf(System.currentTimeMillis() + RandomUtil.getRandomNumber());
                    String newName = banName + ext;
                    // 封装为文件对象
                    File targetFile = new File(realPath, newName);
                    try {
                        // 上传文件
                        multipartFile.transferTo(targetFile);
                        //返回给前端页面的图片

String path = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath()+"//"+imageDir+"//"+newName;
                        map.put("data", path);
                        map.put("msg", "上传成功");
                    }catch(Exception e){
                        map.put("data", "");
                        map.put("msg", "上传失败");
                    }
                }
            }
        }
        return map;    
    }

这样子就OK啦,图片就自动上传到编辑器里面了,而且还可以自适应,效果如下:

这个是浏览器看手机效果

这篇关于summernote异步图片上传的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/713871

相关文章

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

基于 HTML5 Canvas 实现图片旋转与下载功能(完整代码展示)

《基于HTML5Canvas实现图片旋转与下载功能(完整代码展示)》本文将深入剖析一段基于HTML5Canvas的代码,该代码实现了图片的旋转(90度和180度)以及旋转后图片的下载... 目录一、引言二、html 结构分析三、css 样式分析四、JavaScript 功能实现一、引言在 Web 开发中,

Python如何去除图片干扰代码示例

《Python如何去除图片干扰代码示例》图片降噪是一个广泛应用于图像处理的技术,可以提高图像质量和相关应用的效果,:本文主要介绍Python如何去除图片干扰的相关资料,文中通过代码介绍的非常详细,... 目录一、噪声去除1. 高斯噪声(像素值正态分布扰动)2. 椒盐噪声(随机黑白像素点)3. 复杂噪声(如伪

Python中图片与PDF识别文本(OCR)的全面指南

《Python中图片与PDF识别文本(OCR)的全面指南》在数据爆炸时代,80%的企业数据以非结构化形式存在,其中PDF和图像是最主要的载体,本文将深入探索Python中OCR技术如何将这些数字纸张转... 目录一、OCR技术核心原理二、python图像识别四大工具库1. Pytesseract - 经典O

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意