文章目录

  • 前言
  • 一、map 遍历方法
  • 二、java正则学习
  • 三、后端传到前端图片三种情况
    • 1. 图片流数据(InputStream) 转 base64,前端展示保存
      • a. 后端:输入流转base,直接调用方法
      • b. 前端显示
      • c. 保存
    • 2. 传图片流数据,前端展示保存
      • a. 后端控制成
      • b. 前端展示
      • c. 照片保存
    • 3. 传图片url,前端展示保存(简单)
      • a. 后端处理
      • b. 前端展示
      • c. 保存图片

前言

一、map 遍历方法

package test.feng;import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;/*** @ClassName Test* @Description TODO* @Author admin* @Date 2021/6/8 15:38* @Version 1.0*/
public class TestMap {public static void main(String[] args) {System.out.println("this is text".matches("this is text"));}public static void main1(String[] args) {Map<String, String> map = new HashMap<String, String>();map.put("1", "value1");map.put("2", "value2");map.put("3", "value3");//第一种:普遍使用,二次取值System.out.println("通过Map.keySet遍历key和value:");Set<String> keySet = map.keySet();for (String key : keySet) {System.out.println("key= " + key + " and value= " + map.get(key));}//第二种System.out.println("通过Map.entrySet使用iterator遍历key和value:");Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();while (it.hasNext()) {Map.Entry<String, String> entry = it.next();System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());}//第三种:推荐,尤其是容量大时System.out.println("通过Map.entrySet遍历key和value");for (Map.Entry<String, String> entry : map.entrySet()) {System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());}//第四种System.out.println("通过Map.values()遍历所有的value,但不能遍历key");for (String v : map.values()) {System.out.println("value= " + v);}}
}

二、java正则学习

正在学习中~

package test.feng;/*** @ClassName Test* @Description TODO* @Author admin* @Date 2021/6/9 13:58* @Version 1.0*/
public class TestMatches {public static void main(String[] args) {// studySystem.out.println("this is text".matches("this is text"));System.out.println("this     is      text".matches("this\\s+is\\s+text"));System.out.println("555".matches("^\\d+(\\.\\d+)?"));System.out.println("1.4".matches("^\\d+(\\.\\d+)?"));System.out.println("14.333334".matches("^\\d+(\\.\\d+)?"));System.out.println("144444.333334".matches("^\\d+(\\.\\d+)?"));System.out.println(".144444.333334".matches("^\\d+(\\.\\d+)?"));System.out.println(".144444.333334.".matches("^\\d+(\\.\\d+)?"));System.out.println("---------------");// 第一次斜杠 代表 转义字符System.out.println("24524.47".matches("^\\d+(\\.\\d+)?")); // trueSystem.out.println("24524.47a".matches("^\\d+(\\.\\d+)?")); // falseSystem.out.println("24524.47好".matches("^\\d+(\\.\\d+)?"));}
}

三、后端传到前端图片三种情况

第二个方式还未总结完,第一、三个方式总结完成。

1. 图片流数据(InputStream) 转 base64,前端展示保存

a. 后端:输入流转base,直接调用方法

引入

import org.apache.commons.io.IOUtils;
InputStream resourceAsStream = processService.resourceRead(id,type);
byte[] bytes = IOUtils.toByteArray(resourceAsStream);String encoded = Base64.getEncoder().encodeToString(bytes);

b. 前端显示

HTML中使用和保存:

<img src="data:image/png;base64,..." />
<view class="save" @click="saveAlbum">保存二维码</view>

c. 保存

saveAlbum() {uni.getSetting({ //获取用户的当前设置success: (res) => {if (res.authSetting['scope.writePhotosAlbum']) { //验证用户是否授权可以访问相册this.saveImageToPhotosAlbum();} else {uni.authorize({ //如果没有授权,向用户发起请求scope: 'scope.writePhotosAlbum',success: () => {this.saveImageToPhotosAlbum();},fail: () => {uni.showToast({title: "请打开保存相册权限,再点击保存相册分享",icon: "none",duration: 3000});setTimeout(() => {uni.openSetting({ //调起客户端小程序设置界面,让用户开启访问相册success: (res2) => {// console.log(res2.authSetting)}});}, 3000);}})}}})},
saveImageToPhotosAlbum() {let base64 = this.codeImg.replace(/^data:image\/\w+;base64,/, ""); //去掉data:image/png;base64,let filePath = wx.env.USER_DATA_PATH + '/hym_pay_qrcode.png';uni.getFileSystemManager().writeFile({filePath: filePath, //创建一个临时文件名data: base64, //写入的文本或二进制数据encoding: 'base64', //写入当前文件的字符编码success: res => {uni.saveImageToPhotosAlbum({filePath: filePath,success: function(res2) {uni.showToast({title: '保存成功',icon: "none",duration: 5000})},fail: function(err) {// console.log(err.errMsg);}})},fail: err => {//console.log(err)}})
}

2. 传图片流数据,前端展示保存

a. 后端控制成

OutputStream output = response.getOutputStream();
byte[] buffer = new byte[10240];
for (int length = 0; (length = erWeiMa.read(buffer)) > 0; ) {output.write(buffer, 0, length);
}

b. 前端展示



c. 照片保存

downLoad(data){let fileName = data.fileName; //下载的文件名字 data是我组件中传出来的this.fileDownLoadApi({id:data.id}).then(res=>{this.$Message.info('正在下载,请稍等...')//接受blob格式数据,然后保存起来let url = window.URL.createObjectURL(new Blob([res.data]))//下载方式。如果浏览器兼容下载,就直接下载if(window.navigator&&window.navigator.msSaveOrOpenBlob){window.navigator.msSaveOrOpenBlob(new Blob([res.data]),fileName)}else{//不兼容,利用a标签的点击属性自动下载,之前window.open(url)//只是打开一个新的窗口,并不触发下载动作,所以只能模拟a标签点击事件var eleLick = document.createElement('a');eleLick.download = fileName;eleLick.style.display = 'none';eleLick.href = url;document.body.appendChild(eleLick);eleLick.click();eleLick.remove();//释放window.URL.revokeObjectURL(url);// window.open(url)}}).catch(()=>{console.log('下载失败了');})
},

3. 传图片url,前端展示保存(简单)

a. 后端处理

后端生成图片,存到oss上,返回图片URL。

b. 前端展示

类似这种,直接放上图片URL即可

<img src=https://ss0.bdstatic.com/70cFuHSh_Q1YnxGkpoWK1HF6hhy/it/u=2496571732,442429806&fm=26&gp=0.jpg" />

c. 保存图片

项目开发用的是uni-app,所以这里下载保存图片也用的是uni-app的方法,方法参数的使用可以看具体官网。当然微信小程序的微信开发文档上面也有微信的保存方法。

uni-app(微信原生开发:微信开发文档)保存图片需要两步:

  1. 先使用 uni.downloadFile({}):下载文件方法; 返回文件临时路径
  2. 再使用 uni.saveImageToPhotosAlbum({}):保存图片到手机。

uni-app文档:https://uniapp.dcloud.io/api/request/network-file?id=downloadfile
微信开放文档:https://developers.weixin.qq.com/miniprogram/dev/api/file/wx.saveFile.html

posterSure(){// 保存图片 到手机上uni.downloadFile({url: this.posterUrl,success: function (res) {console.log("aaaaaaaaaaaa:",JSON.stringify(res))if (res.statusCode === 200) {console.log('下载成功');}uni.saveImageToPhotosAlbum({filePath: res.tempFilePath,success: function (res) {console.log(res)console.log('下载成功');this.$refs.uToast.show({title: '保存成功',type: 'success'})},fail: function (res) {console.log(res)console.log('fail')}})},fail: function () {console.log('fail')}})
},

java基础:map遍历使用;java使用 Patten 和Matches 进行正则匹配;后端传到前端展示图片三种情况,并保存到手机;相关推荐

  1. Java数据结构Map遍历和排序

    map结构和list结合很好用,基本的遍历和排序每次都要查一下,用的不熟练,这里汇总下map的基本遍历和排序,参考的代码如下: package com.vip;import java.util.Arr ...

  2. java中Map遍历的四种方式

    java中Map遍历的四种方式 在java中所有的map都实现了Map接口,因此所有的Map(如HashMap, TreeMap, LinkedHashMap, Hashtable等)都可以用以下的方 ...

  3. java中Map遍历的三种方式

    Java中Map遍历的三种方式 前言 一:在for循环中使用entries实现Map的遍历: 二:在for循环中遍历key或者values,一般适用于只需要map中的key或者value时使用,在性能 ...

  4. Java 基础面试题,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  5. Java七十四: Java基础/核心知识总结 — — “Java千字文”

    Java基础/核心知识总结 - - "Java千字文" Java基础/核心知识笔记终于完结,从Java语言诞生到jdk8新特性,共计74篇博文,43幅自制插图,35张表格,7万6千 ...

  6. 【Java基础知识 1】Java入门级概述,让阿里架构师告诉你为什么要分库分表

    1998年12月8日,第二代Java平台的企业版J2EE发布. 1999年4月27日,HotSpot虚拟机发布. 2005年6月,在Java One大会上,Sun公司发布了Java SE 6.此时,J ...

  7. java基础知识之初识java

    java基础知识之初识java JAVA基础课后总结 一 1.计算机程序 定义:程序(Program)是为实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合. 2.指令 定义:指令就是指示机 ...

  8. Linux中的Java类,Java基础入门学习-Java中类的属性

    Java基础入门学习-Java中类的属性 发布时间:2006-05-27 00:46:15来源:红联作者:WWW Public.private.protected显示了三种类中的属性和服务的类型,pu ...

  9. Java基础第一讲:Java的故事和Java编程环境搭建

    { Android学习指南 } 适于自学的ANDORID学习指南,基于ANDROID 2.2.2.3.3及3.0版本讲解 <ANDROID学习指南>目录 RSS Java基础第一讲:Jav ...

最新文章

  1. UVa1388 - Graveyard
  2. linux赋予文件夹所有权限_linux – 如何将某些用户权限仅授予子文件夹
  3. springcloud alibaba + seata 1.3.0 集成文档
  4. oracle按时间导出,如何为Oracle导出文件加上时间戳
  5. 拥抱敏捷的用例分析方法
  6. camel eip_Apache Camel教程– EIP,路由,组件,测试和其他概念的简介
  7. 软考网络规划设计师基础知识考察要点
  8. 主类main方法里面可以有不带public的子类 但是不能有接口
  9. Android UI开发第四十篇——ScrollTricks介绍
  10. 手把手教你搭建LyncServer2013之部署边缘服务器(七)
  11. github命令记录
  12. 基于jQuery的响应式网站视频插件FitVids.js
  13. 架构师资源汇总 从入门到精通 将近20年的工作经验毫无保留分享
  14. 微信小程序 自定义底部导航栏
  15. 2021-02-24 bat 批处理教程
  16. 彩信发送和接收关键流程
  17. Mac使用Homebrew极速安装启动RabbitMQ一把梭
  18. 市面上常见模拟器比对
  19. 怎样将「插件化」接入到项目之中?
  20. 文献阅读(182)Bufferless NoC

热门文章

  1. linux u盘weiyi,petalinux 中怎么加入u盘
  2. 深度复盘:用半年时间操盘一家出海创业公司
  3. 四足机器人研究(一)-V-rep宇树A1模型导入
  4. struts spring hibernate 配置
  5. Android使用webview获取百度百家号网站源码
  6. Word排版时同时插入脚注和分栏的技巧总结
  7. (SMI,MDIO)高阻态陷阱
  8. hadoop1与hadoop2的区别
  9. AutoCAD处理工具Aspose.CAD最新版三大新功能推荐——支持水印、CF2格式和OLE对象
  10. ARKit-带你走进全新的世界(四:平面检测)