Springboot+layui实现上传图片,并保存到数据库,并展示在页面中

前言

在写项目时候,因为要上传图片保存到数据库,然后从数据库中读取出来,为了实现这一功能,在网上查找了很多资料,最后使用layui官方组件,加上springboot实现。具体实现就是把图片上传到指定的保存路径(我这里保存在本地了),然后路径上传到数据库。后来演示项目时候发现chrome浏览器不能直接访问本地文件,然后又加上了路径映射。

展示

成功展示在这里插入图片描述

在这里插入图片描述

layui的上传部分

<div class="layui-form-item">
	<label class="layui-form-label">照片</label>
	<div class="layui-input-block">
		<!-- 上传按钮 -->
        <button type="button" class="layui-btn" id="upload1">
        	上传图片
        </button>
        <!-- 隐藏的input -->
        <input type="hidden" id="pic" name="pic"th:value="${obj?.pic}"/>
        <!-- 预览区域 -->
        <div id="imgDiv" class="layui-upload-list" style="display: none;">
        	<img class="layui-upload-img" width="100px" height="80px" id="demo1" name="msg"/>
            <p id="demoText"></p>
        </div>
	</div>
</div>
//普通图片上传
        var uploadInst = upload.render({
            elem: '#upload1', //绑定元素
            url: '/car/uploadFile', //上传接口
            before: function(obj){
                //预读本地文件示例
                obj.preview(function(index, files, result){
                    $('#demo1').attr('src', result); //图片链接(base64)
                });

            },
            done: function(res){
                //如果上传失败
                if(res){
                    //上传成功
                    layer.alert("上传成功"+res.url);
                    document.getElementById("pic").value = res.url;
                    $("#imgDiv").css("display","")// 显示图片框
                } else {
                    return layer.msg('上传失败');
                }
            },
            error: function(){
                //演示失败状态,并实现重传
                var demoText = $('#demoText');
                demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-mini demo-reload">重试</a>');
                demoText.find('.demo-reload').on('click', function(){
                    uploadInst.upload();
                });
            }
        });

后台

@ResponseBody
    @RequestMapping(value = "/uploadFile",method = RequestMethod.POST)
    public Map<String, Object> uploadFile(HttpServletRequest servletRequest, @RequestParam("file") MultipartFile file)
            throws IOException {
        // 如果文件内容不为空,则写入上传路径
        if (!file.isEmpty()) {
            // 上传文件路径
            String UploadPath = uploadPath;
            //取得原文件名字
            String fileName = file.getOriginalFilename();
            //取得文件扩展名
            String suffix = fileName.substring(fileName.lastIndexOf("."));
            //提取系统时间作为新文件名
            String prefix = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date().getTime());
            //保存路径
            // 上传文件名
            String filename = prefix+suffix;
            File filepath = new File(UploadPath, filename);
            // 判断路径是否存在,没有创建
            if (!filepath.getParentFile().exists()) {
                filepath.getParentFile().mkdirs();
            }
            // 将上传文件保存到一个目标文档中
            File file1 = new File(UploadPath + File.separator + filename);
            file.transferTo(file1);
            Map<String, Object> res = new HashMap<>();
            // 返回的是一个url对象,图片名称
            res.put("url", filename);
            return res;
        } else {
            return null;
        }
    }

我定义了保存路径

@Value("${upload-path}")
    private String uploadPath;

还有路径映射文件

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/image/**").addResourceLocations("file:E:/image/");
    }
}

配置文件

upload-path: E:/image/
spring:
	resources:
	    static-locations: classpath:/static/,file:${upload-path}

前端展示

通过layui获取

{field:'pic',title:'车辆图片',algin:'center',
                        templet:function (d) { return '<div><img src="/image/'+d.pic+'", ' +
                            'style="width: 200px;height: 100px"></div>'}},
  • 12
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 28
    评论
首先,你需要在你的Spring Boot项目添加MyBatis和MyBatis-Spring依赖。然后,在你的项目创建一个Mapper接口,用来定义数据库操作的方法。接着,你需要在MyBatis的配置文件配置数据源和Mapper接口。 在前端方面,你可以使用LayUI的表格组件来展示数据库的数据。你需要发送一个Ajax请求到后台,然后在后台通过MyBatis查询数据库的数据,并将结果返回给前端。在前端收到数据之后,你可以使用LayUI的表格组件来展示数据。 下面是一个简单示例: 1. 创建Mapper接口 ```java @Mapper public interface UserMapper { @Select("SELECT * FROM user") List<User> getUsers(); } ``` 2. 配置MyBatis 在application.properties或application.yml添加数据库配置: ```properties spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&useSSL=false&serverTimezone=Asia/Shanghai spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver mybatis.mapper-locations=classpath:mapper/*.xml ``` 3. 创建Controller ```java @RestController public class UserController { @Autowired private UserMapper userMapper; @GetMapping("/users") public List<User> getUsers() { return userMapper.getUsers(); } } ``` 4. 编写前端代码 ```html <table class="layui-table"> <thead> <tr> <th>ID</th> <th>用户名</th> <th>邮箱</th> </tr> </thead> <tbody id="userList"> </tbody> </table> <script> $(function () { $.get('/users', function (data) { var html = ''; $.each(data, function (i, user) { html += '<tr>'; html += '<td>' + user.id + '</td>'; html += '<td>' + user.username + '</td>'; html += '<td>' + user.email + '</td>'; html += '</tr>'; }); $('#userList').html(html); }); }); </script> ``` 这样,当页面加载完成时,会自动发送一个Ajax请求到后台获取用户列表,并将结果展示在表格

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值