Java使用base64格式上传图片

2023-11-02

使用蚂蚁金服ui直接返回的是base64格式的图片

通过post方式进行请求,然后在控制器中以字符串的形式进行接收。
接收之后进行转图片存储处理,只保存路径到数据库中。

base64字节转图片代码:

package com.utils;

import sun.misc.BASE64Decoder;

import java.io.FileOutputStream;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

/**
 * Created by Mr Pan
 * on 2019/5/20.
 */
public class Base64ToImg {
  public static String GenerateImage(String imgStr, String imgFilePath,String rootPath) throws Exception {
    if (imgStr == null) // 图像数据为空
      return "";
    BASE64Decoder decoder = new BASE64Decoder();

    // Base64解码,对字节数组字符串进行Base64解码并生成图片
    imgStr = imgStr.replaceAll(" ", "+");
    System.out.println(imgStr);
    byte[] b = decoder.decodeBuffer(imgStr.replace("data:image/jpeg;base64,", ""));
    for (int i = 0; i < b.length; ++i) {
      if (b[i] < 0) {// 调整异常数据
        b[i] += 256;
      }
    }
    String imgName = getRandomFileName()+".jpg";
    String dbUrl = "";
    // 生成jpeg图片D:\test\attendance\src\main\webapp\assets\images\leave
    imgFilePath = "D:\\test\\attendance\\src\\main\\webapp\\assets\\images\\leave\\"+imgName;//新生成的图片
    String imgFilePath2 = "D:\\test\\attendance\\target\\assets\\images\\leave\\"+imgName;
    OutputStream out = new FileOutputStream(imgFilePath);
    out.write(b);
    out.flush();
    out.close();
    OutputStream out1 = new FileOutputStream(imgFilePath2);
    out1.write(b);
    out1.flush();
    out1.close();
    dbUrl = rootPath+"assets/images/leave/"+imgName;
    return dbUrl;
  }
  public static String getRandomFileName() {

    SimpleDateFormat simpleDateFormat;

    simpleDateFormat = new SimpleDateFormat("yyyyMMdd");

    Date date = new Date();

    String str = simpleDateFormat.format(date);

    Random random = new Random();

    int rannum = (int) (random.nextDouble() * (99999 - 10000 + 1)) + 10000;// 获取5位随机数

    return rannum + str;// 当前时间
  }

}

getRandomFileName函数是一个产生随机名称的函数,上面代码的函数中将图片输出到了两个地方,如果明确了位置的话,一个就可以了。
有个问题很郁闷的就是前台我想传入一个数组进来,因为上传的图片可能是多个,前台可以用数组传,但是后台没法用数组接收。我这里后台接收是放在map中进行接收的,然后取出来是通过尝试的方法试出来的。。。。
代码如下:

  @RequestMapping(value = "/addLeaveItem", method = RequestMethod.POST)
  @ResponseBody
  public String addLeaveInfo(LeaveInfo leaveInfo,@RequestParam Map params)throws Exception
  {

    String urlString = new String("");
    urlString = Base64ToImg.GenerateImage(params.get("urls[0]").toString(),"D://test","http://localhost:8080/attendance/");
    if(params.get("urls[1]") != null){
      if(!urlString.equals("")){
        System.out.println(urlString);
        urlString = urlString + "+" +Base64ToImg.GenerateImage(params.get("urls[1]").toString(),"D://test","http://localhost:8080/attendance/");
      }
    }
    Map<String, Integer> map = new HashMap<String, Integer>();
    Integer rows = 0;
    if(! "".equals(urlString)){
      leaveInfo.setImgs(urlString);
      rows = leaveInfoServiceImpl.InsertLeaveInfo(leaveInfo);
    }
    map.put("data",rows);
//    System.out.println(leaveInfo);
    return JSON.toJSONString(map);
  }

base64传到后台要注意,需要将其中的空格替换为+。这是在传输过程会自动变化的,然后就是内容部分要替换掉,前面的内容,替换为空。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java使用base64格式上传图片 的相关文章

  • 使用 objectGUID 进行查询 - Spring LDAP 模板

    我正在尝试获取 存储并依次使用 objectGUID 来查询 Active Directory 为了获取用户属性我正在使用以下 public static class MyDnKeyValueAttMapper implements Att
  • 哪个类调用了我的静态方法?

    假设我有一个带有静态方法的 Java 类 如下所示 class A static void foo Which class invoked me 进一步假设 A 类有任意数量的子类 class B extends A class C ext
  • java替代Thread.stop()来中断特定调用

    我正在寻找一种方法来告诉这个调用 大约需要 20 120 秒 final Area image final AffineTransform transform new AffineTransform transform scale imag
  • 从 Bitmap 类创建 .bmp 图像文件

    我创建了一个使用套接字的应用程序 客户端在其中接收图像并将图像数据存储在 Bitmap 类中 谁能告诉我如何创建一个名为我的图像 png or 我的图像 bmp来自此 Bitmap 对象 String base64Code dataInpu
  • 警告:跳过条目,因为它不是绝对 URI。 NetBeans 中的 GlassFish

    我成功安装了 GlassFish 但是 当我启动服务器时 我收到两条警告消息 警告 跳过条目 因为它不是绝对 URI 那是关于什么的 Launching GlassFish on Felix platform Aug 09 2014 10
  • 隐藏类的 System.out.print 调用

    我正在使用 java 库 jar 文件 该文件的作者放入了一堆System out print and System out printlns 有没有办法隐藏特定对象的这些消息 编辑 看起来jar文件似乎正在创建一堆线程 并且每个线程都有它
  • 我需要显式关闭连接吗?

    我持有一个实例MongoClient and DB在我的应用程序中 每次我想执行某些操作时 我都会调用getCollection 我想知道是否需要显式关闭连接 就像connection close 在 JDBC 中 强调一下 我只有一个Mo
  • 根据哈希值确认文件内容

    我需要 检查完整性 content文件数量 文件将写入 CD DVD 可能会被复制多次 这个想法是识别正确复制的副本 在从 Nero 等中删除它们之后 我对此很陌生 但快速搜索表明Arrays hashCode byte http down
  • Jodatime 日期格式

    是否可以格式化 JodaTime 日期 这是代码 private static LocalDate priorDay LocalDate date1 do date1 date1 plusDays 1 while date1 getDayO
  • JSON 对象数组转 Java POJO

    将此 JSON 对象转换为 java 中的类 您的 POJO 类中的映射将如何 ownerName Robert pets name Kitty name Rex name Jake This kind of question is ver
  • Ant 无法启动,给出主类错误

    我正在运行 Elementary OS 基于 Ubuntu 12 并且在运行 apache ant 时遇到问题 它在重新启动之前就可以正常工作 所以我不确定会发生什么变化 我在 etc environment 中定义了环境变量 如下所示 P
  • 在Java中使用BufferedWriter写入文件时监视文件大小?

    我正在将一个可能很长的项目列表写入文件 我正在写的项目的长度是可变的 如果生成的文件大小大于10M 则应将其分成多个文件 为了提高性能 我目前使用 BufferedWriter 如下所示 final FileOutputStream fos
  • java.lang.IllegalArgumentException:addChild:子名称“/”不唯一

    java lang IllegalArgumentException addChild 子名称 不唯一 通过在 tomcat webapps 文件夹中启用和禁用 saml 单点登录来替换现有 war 文件时遇到此问题 我正在使用 apach
  • wsdl 没有服务元素

    我必须使用 WCF Web 服务并获得 WSDL 外部的 因此无法控制 WSDL 在 WSDL 定义中 我没有找到包含服务 端口和地址元素的服务元素 WSDL 中不存在这种情况正常吗 这对于 WCF WSDL 来说很常见吗 我正在尝试使用轴
  • 我可以关闭并重新打开套接字吗?

    我学习了一个使用套接字的例子 在此示例中 客户端向服务器发送请求以打开套接字 然后服务器 侦听特定端口 打开套接字 一切都很好 套接字从双方 客户端和服务器 打开 但我仍然不清楚这个东西有多灵活 例如 客户端是否可以关闭一个打开的 从两端
  • 使用链接列表插入优先级队列的方法

    首先 我觉得我应该提到这是一项作业 我并不是在寻找直接的代码答案 只是为了指出正确的方向 我们被要求在链表中实现优先级队列 我正在努力编写 insert 函数的第一部分 在代码中我尝试检查是否head包含任何内容 如果没有则设置为head
  • 如何隐藏或删除 Android HoneyComb 中的状态栏?

    如何隐藏或删除 Android HoneyComb 中的状态栏 每次运行应用程序时 我都会发现某些内容必须被状态栏覆盖 我尝试改变AndroidManifest xml 但没有任何改变 你不知道 它被认为是永久的屏幕装饰 就像电容式主页 菜
  • 升级到 Tomcat 8 时出现 ClassNotFoundException

    我最近将 NetBeans IDE 从 v7 3 升级到 v8 突然我的应用程序在连接到数据库时在服务器启动时抛出异常 这两个版本的 IDE 之间的唯一区别是后者使用 Tomcat 8 异常日志 javax naming NamingExc
  • 如何在 Servlet 中打开弹出窗口,然后重定向页面

    我想在调用 servlet 时打开一个弹出窗口 然后想将 servlet 重定向到某个 jsp page 这就是我所做的 protected void doGet HttpServletRequest request HttpServlet
  • 安卓框架?

    是否有任何框架比构建 Android 应用程序更容易 您会对其中一个感兴趣吗 很快就会有 我正在开发 DroidFu 一个 Android 共享库 它将为您提供 活动 和服务 中直接提供大量实用功能 例如生成列表和错误对话框 检查 Inte

随机推荐

  • 「第二篇」全国一等奖,经验帖。

    点击上方 大鱼机器人 选择 置顶 星标公众号 福利干货 第一时间送达 阅读文本大概需要 6 分钟 0 前言 本文作者 谢斌 曾经获得2017年控制题 板球控制系统 全国一等奖 他之前有写过几篇关于比赛的文章 大家可以点击阅读 全国一等奖 他
  • 如何使用html制作网页

    如何使用html制作网页 一 html简介 1 1概念 HTML即HyperText Mark up Language 意思是超文本标记语言 HTML不是一种编程语言 而是一种标记语言 超文本指的是超链接 标记指的是标签 是一种用来制作网页
  • 如何保护单例不被反射修改?

    public class Safety private static Safety instance new Safety private Safety if instance null throw new RuntimeException
  • hadoop生态系统的详细介绍-详细一点

    前提 日常喜欢看一些微信分享的好文 总结下来 可以作为过滤器吧 节约更多人的时间 在这里引用的是别人的文章 对原文的作者表示感谢 确实写的很好 hadoop生态系统的详细介绍 简介 Hadoop是一个开发和运行处理大规模数据的软件平台 是A
  • Kafka By the sea——kafka的使用场景

    文章目录 消息队列概述 消息队列应用场景 异步处理 应用解耦 流量削锋 日志处理 消息通讯 消息中间件示例 电商系统 日志收集系统 常用消息队列 ActiveMQ Kafka 消息队列概述 消息队列中间件是分布式系统中重要的组件 主要解决应
  • js怎么做延迟函数delay

    const delay ms gt new Promise resolve reject gt setTimeout resolve ms const getData status gt new Promise resolve reject
  • 评分算法_协同过滤推荐算法:评分预测准确性评估

    纸上得来终觉浅 绝知此事要躬行 宋 陆游 冬夜读书示子聿 对于评分预测常用的准确性评测指标是均方根误差RMSE和平均绝对误差MAE RMSE 均方根误差 对大的偏差更敏感 MAE 平均绝对值误差 注意 R 表示数据集合的长度 准确性指标计算
  • PADS Router VX2.7 操作界面以及常用设置

    打开方式 直接双击Router或者从layout中打开 打开Router 右击工具栏 选择自己想要使用的工具 项目浏览器 输出窗口 电子表格 导航窗口 都在右上角 标志工具栏中 如果不小心关掉 点击即可恢复 坐标以及单位 设置在 工具栏中的
  • 聊聊软件测试的那些事

    笔者入行软件测试行业也有两年左右的时间了 这两年中 在工作中也学习 积累了一些知识 但是每每谈及理论 又好像怎么也说不清一些东西的定义 其实很多人认为 知识学习了会用就可以 但软件测试的道路上 打好基础是很重要的 有些东西你知道但无法清晰表
  • 【leetcode每日刷题】214. 最短回文串

    给定一个字符串 s 你可以通过在字符串前面添加字符将其转换为回文串 找到并返回可以用这种方式转换的最短回文串 示例 1 输入 aacecaaa 输出 aaacecaaa 示例 2 输入 abcd 输出 dcbabcd 解法 KMP算法 假设
  • BUCK电路输入电容计算

    输入电容决定了输入电压的纹波 对于Buck变换器的输入端来说 输入电流是不连续的 在开关管导通的时候会有极大的阶跃电流 芯 片 BUCK控制器 时 间 2021 04 27 说 明 适用于稳态和动态负载 在Buck变换器的输入电压最小时 满
  • Qt中自定义结构体的使用

    Qt的自定义结构体Qt是不认识的 下面就直接列出使用方法 第一步 建议把所需的结构体放在一个单独头文件中 防止头文件相互包含 gg 而且还有条件编译的头自动生成 直接向工作添加C 头文件 自己把名字取好就行了 注意 这样会在 pro中 HE
  • 【JavaScript高级】内存管理与闭包:垃圾回收GC、闭包定义、访问和执行过程、内存泄漏

    文章目录 内存管理 垃圾回收GC 引用计数 Reference counting 标记清除 mark Sweep 闭包 定义 闭包的访问和执行过程 内存泄漏 浏览器的优化 参考 内存管理 所有编程语言 在代码的执行过程中都需要给它分配内存
  • 【python】多进程multiprocessing模块、进程池的使用

    multiprocessing中的多进程Process的基本使用 在python中 进程是通过 multiprocessing 多进程模块来管理的 multiprocessing模块提供了一个Process类来创建进程对象 创建子进程 Pr
  • 【使用 BERT 的问答系统】第 2 章 :用于自然语言处理的神经网络

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • linux脚本定时调用存储过程,LINUX定时执行SHELL脚本实现DB2对存储过程的调用

    需求分析 本地化零件待办数量对应用户统计存入数据表 定时更新 使用linux的crontab定时任务来完成 1 编写存储过程 设置指向的数据库 SET SCHEMA DB2INST1 设置当前的路径 SET CURRENT PATH SYS
  • Java概述

    文章目录 一 Java简介 1 1 Java版本 1 2 Java特点 二 Java运行机制 2 1 Java运行过程 2 2 JDK JRE JVM 三 Java开发环境 3 1 下载 安装JDK 3 2 配置环境变量 四 Java开发规
  • R语言实战-第八章回归

    第八章 回归 简单线性回归 用到基础包中的women数据集 研究身高与体重的关系 head women fit lt lm weight height data women summary fit fitted fit 列出拟合模型的预测值
  • 【深度学习】RetinaFace人脸检测简要介绍

    介绍 Insight Face在2019年提出的最新人脸检测模型 原模型使用了deformable convolution和dense regression loss 当时在 WiderFace 数据集上达到SOTA 基网络有三种结构 基于
  • Java使用base64格式上传图片

    使用蚂蚁金服ui直接返回的是base64格式的图片 通过post方式进行请求 然后在控制器中以字符串的形式进行接收 接收之后进行转图片存储处理 只保存路径到数据库中 base64字节转图片代码 package com utils impor