(原) Bootstrap 可视化HTML编辑器,summernote 图片上传到服务器磁盘


  
  
前台
html

<div id="editor" class="col-sm-8"></div>

js
//加载编辑器
$(document).ready(function () {
    //类型下拉框值
    var sType = "";
    $("#type").change(function () {
        sType = $("#type").val();
    });
    $('#editor').summernote({
        height: 400,
        minHeight: 300,
        maxHeight: 500,
        focus: true,
        lang: 'zh-CN',
        // 重写图片上传
        callbacks: {
            onImageUpload: function (files, editor, $editable) {
                sendFile(files[0], editor, $editable);
            }
        }
    });


    //保存
    $("#save_button").click(function () {
        
            if ($('#editor').summernote('code').length < 20000) {
                $.ajax({
                    url: "/*",
                    type: "POST",
                    dataType: "json",
                    data: {
                        title: $("#title").val(),
                        publishPerson: $("#publishPerson").val(),
                        content: $('#editor').summernote('code'),
                        publishTypeId: publishTypeId,
                        type: sType,
                        remark: $("#remark").val()
                    },
                    success: function (result) {
                        if (result > 0) layer.alert("发布成功!");
                        else layer.alert("发布失败!");
                    }
                });
            }
            else {
                layer.alert("内容超过长度限制!");
            }

    })
});
//图片上传
function sendFile(file, editor, $editable) {
    var filename = false;
    try {
        filename = file['name'];
    } catch (e) {
        filename = false;
    }
    if (!filename) {
        $(".note-alarm").remove();
    }

    //以上防止在图片在编辑器内拖拽引发第二次上传导致的提示错误
    data = new FormData();
    data.append("file", file);
    data.append("key", filename); //唯一性参数

    $.ajax({
        data: data,
        type: "POST",
        url: "/*",  //后台图片上传地址
        cache: false,
        dataType : "json",
        contentType: false,
        processData: false,
        success: function (url) {
            var path = url.path;
            $('#editor').summernote('insertImage', url.path, filename);

        },
        error: function () {
            alert("上传失败!");
        }
    });
}


后台
@RequestMapping(value = "/upload", produces = "text/html;charset=UTF-8")
@ResponseBody
public String addFile(HttpServletRequest request)
        throws Exception {

    Map<String, Object> map = new HashMap<String, Object>();

    CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver(
            request.getSession().getServletContext());
    if (multipartResolver.isMultipart(request)) {
        MultipartHttpServletRequest multiRequest = (MultipartHttpServletRequest) request;
        Iterator<String> iter = multiRequest.getFileNames();
        while (iter.hasNext()) {
            MultipartFile file = multiRequest.getFile(iter.next());
            if (file != null) {
                String myFileName = file.getOriginalFilename();
                if (myFileName.trim() != "") {
                    String fileName = file.getOriginalFilename();

                    String fileBaseName = fileName.substring(0,
                            fileName.lastIndexOf("."));
                    String fileExt = fileName.substring(
                            fileName.lastIndexOf(".") + 1).toLowerCase();
                    SimpleDateFormat df = new SimpleDateFormat(
                            "yyyyMMddHHmmss");
                    String newFileName = df.format(new Date());
                    String fileNames = newFileName
                            + new Random().nextInt(1000) + "." + fileExt;

                    String filePath = request.getSession().getServletContext()
                            .getRealPath("/") + "\\upload\\" + fileNames;
                    File localFile = new File(filePath);
                    if (!localFile.exists()) {// 如果文件夹不存在,自动创建
                        localFile.mkdirs();
                    }
                    file.transferTo(localFile);

                    fileNames = "*" + fileNames;  //* == 前台读取文件方式路径

                    map.put("name", fileBaseName);
                    map.put("path", fileNames);

                    ObjectMapper mapper = new ObjectMapper();
                    String json = mapper.writeValueAsString(map);

                    return json;
                }
            }
        }
    }
    return "";
}



 
  
  
记录一下 不喜勿喷。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Bootstrap拖拽布局源码是一种用于实现网页布局的前端框架。它提供了一套美观、响应式的UI组件和网格系统,使开发者能够快速搭建出适配不同设备的网页。 在Bootstrap中,可拖拽布局源码是指使用拖拽操作来实现页面布局的功能。开发者可以通过简单地拖拽组件来改变其位置和大小,从而实现页面元素的布局调整。 这种拖拽布局功能的实现,一般需要使用JavaScript框架来实现。常见的实现方式是通过使用jQuery的拖拽插件来实现。 在源码中,我们可以找到拖拽布局的相关代码。它通常会定义一些拖拽函数和事件,用来响应用户拖拽操作。例如,当用户拖拽一个组件时,可以通过相应的拖拽事件来更新组件的位置和大小。 源码还会包含对页面元素的创建和初始的代码。它会定义页面的布局结构,包括容器和组件,并添加相应的事件监听器。当用户拖拽这些组件时,源码会通过相应的事件处理函数来更新页面布局。 还有一些功能代码,例如吸附功能和对齐线功能,可以帮助用户更准确地进行布局调整。这些功能通过计算元素之间的距离和位置关系,来提供指示和辅助信息。 总之,Bootstrap拖拽布局源码提供了一套方便的工具和框架,使开发者可以轻松地通过拖拽操作来调整页面布局。这种可拖拽布局源码已经被广泛应用于各种项目中,使页面布局设计更加高效和灵活。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值