springmvc+layui富文本编辑器实现图片上传及回显

流程并不复杂,直接上代码,代码中标有注释
前端代码在layui的官方文档中有,而且既然准备上传图片了,前端应该是没有问题了

<!--layedit文本区域-->
            <label class="icon1 l_width">&nbsp;:</label>
            <div class="div2">
                <textarea id="edit1" lay-verify="content" style="display: none;"></textarea>
            </div>
layedit.set({
  uploadImage: {
    url: '' //接口url
    ,type: '' //默认post
  }
});
//注意:layedit.set 一定要放在 build 前面,否则配置全局接口将无效。
layedit.build('demo'); //建立编辑器

后台:
pom文件中添加上传图片所需依赖

<dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.3</version>
        </dependency>

springmvc配置文件中对上传文件的大小等进行控制

  <!-- 配置文件解析器-->
    <!-- 此处id为固定写法,不能随便取名-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSizePerFile" value="5242880"></property>
        <property name="defaultEncoding" value="UTF-8"/>
        <property name="resolveLazily" value="true"/>
    </bean>

图片上传的控制类

package com.fh.experience.controller;

import com.fh.experience.entity.JsonResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

@RestController
@Slf4j
public class ImageUploadController {
    /**
     * 时间格式化
     */
    private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd/");

    /**
     *   示例: D:/image/
     */
    private String fileSavePath="D:/image/";

    @PostMapping("/upload")
    public JsonResult uploadFile(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
        //1.后半段目录:  2021/07/29即上传的年月日
        if (file.isEmpty()) {
            System.out.println("文件为空");
        }
        String directory = simpleDateFormat.format(new Date());
        /**
         *  2.文件保存目录  D:/image/2021/07/29/
         *  如果目录不存在,则创建
         */
        File dir = new File(fileSavePath + directory);
        if (!dir.exists()) {
            dir.mkdirs();
        }
        //3.给文件重新设置一个名字
        //后缀
        String suffix = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
        String newFileName= UUID.randomUUID().toString().replaceAll("-", "")+suffix;
        //4.创建这个新文件
        File newFile = new File(fileSavePath + directory + newFileName);
        //5.复制操作
        try {
            file.transferTo(newFile);
            //协议 :// ip地址 :端口号 / 文件目录
            String src = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + "/image/" + directory + newFileName;
            Map<String, String> map = new HashMap<>();
            map.put("src",src);
            return JsonResult.builder().data(map).msg("上传成功!").code(0).build();
        } catch (IOException e) {
            return JsonResult.builder().data(null).msg("IO异常!").code(-1).build();
        }
    }
}

上述控制类中涉及到一个封装类

public class JsonResult implements Serializable {
    private Integer code;
    private String msg;
    private Object data;
}

因为layui要求返回值必须是以下形式

{
  "code": 0 //0表示成功,其它失败
  ,"msg": "" //提示信息 //一般上传失败后返回
  ,"data": {
    "src": "图片路径"
    ,"title": "图片名称" //可选
  }
}

以上写完后图片上传功能基本完成,但会发现图片上传成功后,前端图片无法回显,这就需要对资源路径进行映射。一般有修改tomcat中的serve.xml配置文件。这里直接在idea中进行设置。
1.打开tomcat配置
在这里插入图片描述
找到图片上传存储的位置,也就是上面上传控制类中的fileSavePath(D:image)目录。选择后apply-ok,重启tomcat即可
在这里插入图片描述

好的,我可以为您提供一些实现步骤,具体如下: 1.在Spring MVC的配置文件中添加文件上传的配置,包括文件上传的大小、文件保存的路径等配置,如下所示: ``` <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="5242880"/> <property name="defaultEncoding" value="utf-8"/> <property name="resolveLazily" value="true"/> </bean> ``` 2.在前端页面中使用Layui的上传组件,代码如下所示: ``` layui.use('upload', function(){ var upload = layui.upload; //执行实例 var uploadInst = upload.render({ elem: '#test1', //绑定元素 url: '/upload/', //上传接口 accept: 'images', size: 5120, done: function(res){ //上传完毕回调 }, error: function(){ //请求异常回调 } }); }); ``` 3.在Spring MVC的Controller中编写文件上传的代码,包括文件上传、文件保存以及将文件信息保存到数据库的操作,代码如下所示: ``` @RequestMapping(value = "/upload", method = RequestMethod.POST) @ResponseBody public Map<String, Object> upload(HttpServletRequest request, HttpServletResponse response) { Map<String, Object> map = new HashMap<String, Object>(); try { MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; MultipartFile file = multipartRequest.getFile("file"); String fileName = file.getOriginalFilename(); String suffix = fileName.substring(fileName.lastIndexOf(".") + 1); String newFileName = UUID.randomUUID().toString() + "." + suffix; String savePath = request.getSession().getServletContext().getRealPath("/") + "upload/"; File savePathFile = new File(savePath); if (!savePathFile.exists()) { savePathFile.mkdirs(); } String filePath = savePath + newFileName; File dest = new File(filePath); file.transferTo(dest); String imgUrl = "/upload/" + newFileName; //图片访问路径 //将文件信息保存到数据库 Image image = new Image(); image.setFilename(fileName); image.setUrl(imgUrl); imageService.saveImage(image); map.put("code", 0); map.put("msg", "上传成功"); map.put("data", imgUrl); } catch (Exception e) { e.printStackTrace(); map.put("code", -1); map.put("msg", "上传失败"); map.put("data", ""); } return map; } ``` 以上就是使用Spring MVC和Layui实现图片上传并保存到数据库的步骤。希望能对您有所帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值