42.0、springboot-springboot 整合 layui 实现 图片上传

42.0、springboot-springboot 整合 layui 实现 图片上传

导入以下pom依赖:

<!--springboot启动类-->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
<!--lombok-->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
    </dependency>
<!--thymeleaf-->
    <dependency>
        <groupId>org.thymeleaf</groupId>
        <artifactId>thymeleaf-spring5</artifactId>
    </dependency>
    <dependency>
        <groupId>org.thymeleaf.extras</groupId>
        <artifactId>thymeleaf-extras-java8time</artifactId>
    </dependency>
<!--layui-->
    <dependency>
        <groupId>org.webjars</groupId>
        <artifactId>layui</artifactId>
        <version>2.5.7</version>
    </dependency>

第一步:创建一个springboot项目,首先来写一个文件上传的工具类 UploadUtils.java

package com.hkl.util;

import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

//写一个上传的工具类
public class UploadUtils {
    //定义一个目标路径,就是我们要把图片上传到的位置
    private static final String BASE_PATH="D:\\springproject\\demo\\springboot-project-001\\fileupload-project\\src\\main\\resources\\static\\image\\";

    //定义一个图片回显的路径
    private static final String SERVER_PATH="http://localhost:8080/image/";

    public static String upload(MultipartFile file) {
        //获得上传文件的名称
        String filename = file.getOriginalFilename();
        //为了保证图片在服务器中名字的唯一性,这个是我呢要用UUID来对filename进行改写
        String uuid = UUID.randomUUID().toString().replace("_","");
        //将生成的UIDD和filename进行拼接
        String newFilename = uuid+"_"+filename;
        //创建一个文件实例对象
        File image = new File(BASE_PATH, newFilename);
        //对这个文件进行上传操作
        try {
            file.transferTo(image);
        } catch (IOException e) {
            return null;
        }
        System.out.println(SERVER_PATH+newFilename);
        return SERVER_PATH+newFilename;
    }

}

第二步:写一个pojo实体类 DataJson.java

package com.hkl.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Map;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class DataJson {
    private Integer code;
    private String msg;
    private Map<String,String> data;
}

        这里从layui的文档中可以知道回调函数中有三个字段,分别是:code、msg、data 所以在实体类中定义

第三步:写一个controller控制器,UploadController.java

package com.hkl.controller;

import com.hkl.entity.DataJson;
import com.hkl.util.UploadUtils;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import java.util.HashMap;

//用于上传
@Controller
@RequestMapping("/upload")
public class UploadController {

    @RequestMapping("/image")
    @ResponseBody
    public DataJson uploadImage(@RequestParam(value = "file") MultipartFile file) {
        //调用我们写的上传文件的工具类
        String imagePath = UploadUtils.upload(file);//获得图片路径
        DataJson dataJson = new DataJson();
        if(imagePath!=null) {
            dataJson.setCode(1);
            dataJson.setMsg("上传成功");
            HashMap<String,String> map = new HashMap<>();
            map.put("src",imagePath);
            dataJson.setData(map);
        }else {
            dataJson.setCode(0);
            dataJson.setMsg("对不起,上传失败");
        }
        return dataJson;
    }

}

第四步:创建一个/templates/index.html 文件

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>index</title>
    <link rel="stylesheet" th:href="@{/webjars/layui/2.5.7/css/layui.css}">
    <script th:src="@{/webjars/layui/2.5.7/layui.js}"></script>

    <style>
        body {
            background-color: rgb(250,250,250);
        }
        header {
            text-align: center;
            padding: 30px 0;
            font-family: 新宋体;
            font-size: 50px;
        }
        .layui-container {
            background-color: whitesmoke;
            padding: 20px;
        }
    </style>

</head>
<body>

<header>
    基于layui的图片上传并回显的功能
</header>

<article>
    <div class="layui-container">
        <div class="layui-row">
            <form class="layui-form" action="">
                <div class="layui-form-item layui-form-text">
                    <label class="layui-form-label">图片描述</label>
                    <div class="layui-input-block">
                        <textarea name="imageDescription" placeholder="请输入图片的描述" class="layui-textarea"></textarea>
                    </div>
                </div>

                <div class="layui-form-item layui-form-text">
                    <label class="layui-form-label">上传图片</label>
                    <div class="layui-form-label">
                        <button type="button" class="layui-btn" id="upload-button">
                            <i class="layui-icon">&#xe67c;</i>上传图片
                        </button>
                    </div>
                </div>

                <div class="layui-form-item layui-form-text">
                    <label class="layui-form-label">图片预览</label>
                    <div class="layui-input-block">
                        <img src="/image/4b0b732e-65f6-42aa-a148-3e59d42011b3_b%E6%B7%B1%E8%93%9D%E4%B9%8B%E6%B5%B7%E9%B8%A3%E4%BA%BA.jpg" id="image" alt="" style="width: 300px;height: 300px;">
                    </div>
                </div>

                <div class="layui-form-item">
                    <div class="layui-input-block">
                        <button type="submit" class="layui-btn" lay-submit="" lay-filter="demo1">立即提交</button>
                        <button type="reset" class="layui-btn layui-btn-primary">重置</button>
                    </div>
                </div>
            </form>
        </div>
    </div>
</article>

<script>
    //Demo
    layui.use('form', function(){
        var form = layui.form;

        //监听提交
        form.on('submit(formDemo)', function(data){
            layer.msg(JSON.stringify(data.field));
            return false;
        });
    });

    layui.use('upload', function(){
        var upload = layui.upload;
        //获得layui里的jquery
        var $ = layui.$;

        //执行实例
        var uploadInst = upload.render({
            elem: '#upload-button' //绑定元素
            ,url: '/upload/image' //上传接口
            ,done: function(res){
                if(res.code == 1) {
                    //成功
                    layer.msg(res.msg);
                    //首先我们要获得我们上传之后的图片的访问路径
                    var imagePath = res.data.src;
                    $("#image").attr("src",imagePath)
                }else {
                    //失败了
                    layer.msg(res.msg);
                }
            }
            ,error: function(){
                //请求异常回调
            }
        });
    });

</script>
</body>
</html>

项目结构如下:


        然后上传功能就实现了,但是这个图片的回显始终有问题没法实现,应该是因为函数回调的时候图片存入有延迟,http没法立刻的访问到图片所以会无法回显。但是只要把存入图片的文件夹放在Tomcat服务器的文件夹里,就能够解决这个回显的问题了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值