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

相关文章

Python利用PIL进行图片压缩

《Python利用PIL进行图片压缩》有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所以本文为大家介绍了Python中图片压缩的方法,需要的可以参考下... 有时在发送一些文件如PPT、Word时,由于文件中的图片太大,导致文件也太大,无法发送,所有可以对文件中的图

java获取图片的大小、宽度、高度方式

《java获取图片的大小、宽度、高度方式》文章介绍了如何将File对象转换为MultipartFile对象的过程,并分享了个人经验,希望能为读者提供参考... 目China编程录Java获取图片的大小、宽度、高度File对象(该对象里面是图片)MultipartFile对象(该对象里面是图片)总结java获取图片

Java实战之自助进行多张图片合成拼接

《Java实战之自助进行多张图片合成拼接》在当今数字化时代,图像处理技术在各个领域都发挥着至关重要的作用,本文为大家详细介绍了如何使用Java实现多张图片合成拼接,需要的可以了解下... 目录前言一、图片合成需求描述二、图片合成设计与实现1、编程语言2、基础数据准备3、图片合成流程4、图片合成实现三、总结前

使用Python实现图片和base64转换工具

《使用Python实现图片和base64转换工具》这篇文章主要为大家详细介绍了如何使用Python中的base64模块编写一个工具,可以实现图片和Base64编码之间的转换,感兴趣的小伙伴可以了解下... 简介使用python的base64模块来实现图片和Base64编码之间的转换。可以将图片转换为Bas

异步线程traceId如何实现传递

《异步线程traceId如何实现传递》文章介绍了如何在异步请求中传递traceId,通过重写ThreadPoolTaskExecutor的方法和实现TaskDecorator接口来增强线程池,确保异步... 目录前言重写ThreadPoolTaskExecutor中方法线程池增强总结前言在日常问题排查中,

css实现图片旋转功能

《css实现图片旋转功能》:本文主要介绍了四种CSS变换效果:图片旋转90度、水平翻转、垂直翻转,并附带了相应的代码示例,详细内容请阅读本文,希望能对你有所帮助... 一 css实现图片旋转90度.icon{ -moz-transform:rotate(-90deg); -webkit-transfo

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构

C#实现添加/替换/提取或删除Excel中的图片

《C#实现添加/替换/提取或删除Excel中的图片》在Excel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更加美观,下面我们来看看如何在C#中实现添加/替换/提取或删除E... 在Excandroidel中插入与数据相关的图片,能将关键数据或信息以更直观的方式呈现出来,使文档更

C#中图片如何自适应pictureBox大小

《C#中图片如何自适应pictureBox大小》文章描述了如何在C#中实现图片自适应pictureBox大小,并展示修改前后的效果,修改步骤包括两步,作者分享了个人经验,希望对大家有所帮助... 目录C#图片自适应pictureBox大小编程修改步骤总结C#图片自适应pictureBox大小上图中“z轴

使用Python将长图片分割为若干张小图片

《使用Python将长图片分割为若干张小图片》这篇文章主要为大家详细介绍了如何使用Python将长图片分割为若干张小图片,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果1. Python需求