layui+java spring 实现图片文件新增到数据库

news2024/11/22 18:40:03

项目场景:

layui+java spring 实现图片文件新增到数据库


解决方案:

1.首先layui是个不再更新的网址有想了解的可以浏览官网

表格组件 table - Layui 文档

2.官网内有专门的组件 代码直接粘过来即可

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>Demo</title>
  <!-- 请勿在项目正式环境中引用该 layui.css 地址 -->
  <link href="//unpkg.com/layui@2.8.17/dist/css/layui.css" rel="stylesheet">
</head>
<body>
<button type="button" class="layui-btn" id="ID-upload-demo-btn">
  <i class="layui-icon layui-icon-upload"></i> 单图片上传
</button>
<div style="width: 132px;">
  <div class="layui-upload-list">
    <img class="layui-upload-img" id="ID-upload-demo-img" style="width: 100%; height: 92px;">
    <div id="ID-upload-demo-text"></div>
  </div>
  <div class="layui-progress layui-progress-big" lay-showPercent="yes" lay-filter="filter-demo">
    <div class="layui-progress-bar" lay-percent=""></div>
  </div>
</div>
<hr style="margin: 21px 0;">
<div class="layui-upload">
  <button type="button" class="layui-btn" id="ID-upload-demo-btn-2">
    <i class="layui-icon layui-icon-upload"></i> 多图片上传
  </button> 
  <blockquote class="layui-elem-quote layui-quote-nm" style="margin-top: 11px;">
    预览图:
    <div class="layui-upload-list" id="upload-demo-preview"></div>
 </blockquote>
</div>
  
<!-- 请勿在项目正式环境中引用该 layui.js 地址 -->
<script src="//unpkg.com/layui@2.8.17/dist/layui.js"></script>
<script>
layui.use(function(){
  var upload = layui.upload;
  var layer = layui.layer;
  var element = layui.element;
  var $ = layui.$;
  // 单图片上传
  var uploadInst = upload.render({
    elem: '#ID-upload-demo-btn',
    url: '', // 实际使用时改成您自己的上传接口即可。
    before: function(obj){
      // 预读本地文件示例,不支持ie8
      obj.preview(function(index, file, result){
        $('#ID-upload-demo-img').attr('src', result); // 图片链接(base64)
      });
      
      element.progress('filter-demo', '0%'); // 进度条复位
      layer.msg('上传中', {icon: 16, time: 0});
    },
    done: function(res){
      // 若上传失败
      if(res.code > 0){
        return layer.msg('上传失败');
      }
      // 上传成功的一些操作
      // …
      $('#ID-upload-demo-text').html(''); // 置空上传失败的状态
    },
    error: function(){
      // 演示失败状态,并实现重传
      var demoText = $('#ID-upload-demo-text');
      demoText.html('<span style="color: #FF5722;">上传失败</span> <a class="layui-btn layui-btn-xs demo-reload">重试</a>');
      demoText.find('.demo-reload').on('click', function(){
        uploadInst.upload();
      });
    },
    // 进度条
    progress: function(n, elem, e){
      element.progress('filter-demo', n + '%'); // 可配合 layui 进度条元素使用
      if(n == 100){
        layer.msg('上传完毕', {icon: 1});
      }
    }
  });
  // 多图片上传
  upload.render({
    elem: '#ID-upload-demo-btn-2',
    url: '', // 实际使用时改成您自己的上传接口即可。
    multiple: true,
    before: function(obj){
      // 预读本地文件示例,不支持ie8
      obj.preview(function(index, file, result){
        $('#upload-demo-preview').append('<img src="'+ result +'" alt="'+ file.name +'" style="width: 90px; height: 90px;">')
      });
    },
    done: function(res){
      // 上传完毕
      // …
    }
  });
});

</script>

</body>
</html>

这是官网的组件完整代码根据需求自己更改就行,前端就这些没啥很需要注意的

3.java代码

需要注意的点, String uploadDir = "D:\\";写自己定义的路径 

 

/**
 * 通用上传请求
 */
@PostMapping("/uploads")
@ResponseBody
public JsonResult uploads(@RequestParam("file") MultipartFile file) throws IOException {
    // 获取文件名
    String fileName = file.getOriginalFilename();
    // 获取文件内容
    byte[] bytes = file.getBytes();
    // 文件保存目录
    String uploadDir = "D:\\";
    // 文件保存路径
    String filePath = uploadDir + "/" + fileName;
    // 保存文件
    File desc = new File(filePath);
    if (!desc.exists())
    {
        if (!desc.getParentFile().exists())
        {
            desc.getParentFile().mkdirs();
        }
    }
    file.transferTo(desc);
    // 返回文件访问路径
    return JsonResult.success("成功", filePath);
}

  if (!desc.exists()) { if (!desc.getParentFile().exists()) { desc.getParentFile().mkdirs(); } }

这个if判断是判断你路径内有无文件没有的话则会给你创建一个文件用于存储图片,然后将路径和文件名返回给前端,前端定义一个字符串类型将这个路径传到后端就可以了

后端就是正常的新增写法 就不过多说了

也可以观看这个链接的也不错

 java如何将图片储存到数据库?_java上传图片保存到数据库-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1045867.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【IDEA】idea恢复pom.xml文件显示灰色并带有删除线

通过idea打开spring boot项目后&#xff0c;发现每个服务中的pom.xml文件显示灰色并带有删除线&#xff0c;下面为解决方案 问题截图 解决方案 打开file——settings——build,execution,deployment——Ignored Files&#xff0c;把pom.xml前面的复选框去掉&#xff0c;去掉之…

Java反编译工具JD-GUI使用记录

1.下载JD-GUI https://www.onlinedown.net/soft/70298.htm​​​​​​https://www.onlinedown.net/soft/70298.htm 2.启动JD-GUI 进入JD-GUI目录下&#xff0c;dos窗口执行java -jar .\jd-gui.exe&#xff0c;就会弹出工具框&#xff0c;左上角打开项目jar包&#xff0c;即可…

关于汽车维修类中译英的英语翻译

随着全球汽车行业的不断发展&#xff0c;国际化程度的深化使得汽车产业的多语言交流需求日益旺盛&#xff0c;所以汽车翻译及本地化服务的重要性愈发凸显。那么&#xff0c;如何才能做好汽车翻译呢&#xff1f;汽车维修类英语翻译又有哪些要求呢&#xff1f; 我们知道 &#xf…

【机器学习 | 非线性拟合】梯度下降 vs SLSQP算法,谁更胜一筹? 解决六个数据点的非线性拟合难题,挑战非线性拟合问题

&#x1f935;‍♂️ 个人主页: AI_magician &#x1f4e1;主页地址&#xff1a; 作者简介&#xff1a;CSDN内容合伙人&#xff0c;全栈领域优质创作者。 &#x1f468;‍&#x1f4bb;景愿&#xff1a;旨在于能和更多的热爱计算机的伙伴一起成长&#xff01;&#xff01;&…

Selenium —— 网页frame与多窗口处理!

一、多窗口处理. 1.1、多窗口简介 点击某些链接&#xff0c;会重新打开⼀个窗⼜&#xff0c;对于这种情况&#xff0c;想在新页⾯上操作&#xff0c;就 得先切换窗⼜了。 获取窗⼜的唯⼀标识⽤句柄表⽰&#xff0c;所以只需要切换句柄&#xff0c;就可以在多个页⾯灵 活操作了…

react项目优化

随着项目体积增大&#xff0c;打包的文件体积会越来越大&#xff0c;需要优化&#xff0c;原因无非就是引入的第三方插件比较大导致&#xff0c;下面我们先介绍如何分析各个文件占用体积的大小。 1.webpack-bundle-analyzer插件 如果是webpack作为打包工具的项目可以使用&…

20个提升效率的JS简写技巧,告别屎山!

JavaScript 中有很多简写技巧&#xff0c;可以缩短代码长度、减少冗余&#xff0c;并且提高代码的可读性和可维护性。本文将介绍 20 个提升效率的 JS 简写技巧&#xff0c;助你告别屎山&#xff0c;轻松编写优雅的代码&#xff01; 移除数组假值 可以使用 filter() 结合 Bool…

东郊到家app小程序开发,上门按摩系统优势

东郊到家APP小程序开发 随着生活节奏的紧张&#xff0c;原本的逛菜市场&#xff0c;现在都是网上下单&#xff0c;现在互联网服务都已经融入到人们生活的各个方面 一、上门按摩预约系统的优势 1、高效 一键预约系统只需保存用户信息&#xff0c;以后只需一键预约即可完成。 2、…

分享一下怎么搭建公众号积分商城小程序

随着微信小程序的日益普及&#xff0c;越来越多的商家开始利用微信公众号和小程序进行营销推广。其中&#xff0c;搭建公众号积分商城小程序是一个非常受欢迎的选择。通过积分商城小程序&#xff0c;商家可以吸引更多的用户关注&#xff0c;提高品牌知名度&#xff0c;促进销售…

三门问题-Swift测试

三门问题&#xff08;Monty Hall problem&#xff09;亦称为蒙提霍尔问题、蒙特霍问题或蒙提霍尔悖论&#xff0c;大致出自美国的电视游戏节目Lets Make a Deal。问题名字来自该节目的主持人蒙提霍尔&#xff08;Monty Hall&#xff09;。 参赛者会看见三扇关闭了的门&#xf…

Camera Metadata跨进程传递

google camera2的参数设置都是通过CaptureRequest来设置的&#xff0c;相关的对象都实现了Parcelable接口才能进行跨进程传递。 一、整个Metadata的传递 1、CameraDeviceImpl.java 无论是capture还是repeating都会调用到下面的 submitRequestList 方法 mRemoteDevice就是Cam…

得物API元数据中心探索与思考

一、背景 目前市面上针对API的管理平台很多&#xff0c;但由于各种客观因素&#xff0c;这些平台的功能都更多聚焦在API文档的消费侧。而对于API文档的生成都非常依赖开发人员的手动创建&#xff0c;很难保障文档的实时性和有效性。市面上常见的API管理平台&#xff0c;由于缺…

【C++】笔试训练(二)

目录 一、选择题二、编程题1、排序子序列2、倒置字符串 一、选择题 1、1. 使用printf函数打印一个double类型的数据&#xff0c;要求&#xff1a;输出为10进制&#xff0c;输出左对齐30个字符&#xff0c;4位精度。以下哪个选项是正确的&#xff1f; A %-30.4e B %4.30e C %-3…

zookeeper mac安装

目录 1.下载zookeeper安装包 2.解压安装包 3.修改配置文件 4.启动服务端 5.启动客户端 这边工作中用到了zookeeper组件&#xff0c;但自己独立安装弄的不太多&#xff0c;这边本机mac装一个做测试使用 以下是安装记录&#xff0c;可以作为参考 从以下链接zookeeper版本列…

【二】xxl-job 源码分析

xxl-job 源码分析 简介&#xff1a;阅读优秀的开源项目源码总是一件让人激动的事情&#xff0c;分布式调度平台xxl-job我们在生产环境也是有了很多的实践应用&#xff0c;一款产品使用久了对其实现原理多少有些了解了&#xff0c;今天也是抽出整块的时间来认真分析一下xxl-job的…

RFID技术:钢条加工现场的智能化管理利器

RFID技术&#xff1a;钢条加工现场的智能化管理利器 RFID&#xff08;Radio Frequency Identification&#xff09;技术作为一种非接触式自动识别技术&#xff0c;近年来在工业领域得到广泛应用。本文将探讨RFID在钢条加工现场的应用&#xff0c;包括材料追踪与管理、生产过程…

【LeetCode热题100】--560.和为K的子数组

560.和为K的子数组 示例2的结果&#xff1a; 输入&#xff1a;nums [1,2,3] ,k3的时候 连续子数组有[1,2],[3]&#xff0c;一共有2个 利用枚举法&#xff1a; 枚举[0,…i]里所有的下标j来判断是否符合条件 class Solution {public int subarraySum(int[] nums, int k) {i…

Redis高可用之持久化、主从复制(附配置实例)

目录 一、Redis高可用1.1 简介1.2 高可用策略 二、Redis 持久化2.1 简介2.2 redis 的 2 种持久化方式2.2.1 RDB持久化2.2.2 AOF持久化 三、Redis主从复制3.1 什么是主从复制&#xff1f;3.2 为什么要用主从复制&#xff1f;3.3 主从复制的特性3.4 主从复制工作原理3.4.1 全量复…

Java项目-Spring Boot的生鲜网上交易系统

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝30W、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 文章目录 1 简介2 技术栈3 系统功能4 功能设计5系统详细设计5.1系统功能模块5.2后台功能模块5\.2\.1用户功…

TextSniper for Mac: 革新您的文本识别体验

你是否曾经需要从图片或扫描文档中提取文本&#xff0c;却苦于没有合适的工具&#xff1f;那么&#xff0c;TextSniper for Mac将是你的完美解决方案。这款文本识别工具将彻底改变你处理图像和扫描文件的方式&#xff0c;让你更快速、更高效地完成任务。 TextSniper for Mac 是…