SpringBoot获取文件将要上传的IP地址

news/2024/12/25 13:52:50/文章来源:https://www.cnblogs.com/bigcat26/p/18531280

说明:
有的项目会涉及文件上传,比如“更换logo业务”,或者“自定义任务上传脚本等业务”都会涉及上传,而有的项目上传成功后找不到上传地址,所以需要打印IP,方便用户知晓上传的精确地址,下面封装了一个IPv4 工具类(因为是拷贝现成代码其中会有某些参数未注释,不知道啥意思,敬请谅解!)

IPv4 工具类包含以下方法:

  1. 是否IPv4地址
  2. 将IP从String转化为long型
  3. 判断两个IP是否在同一个网段内
  4. 获取服务IP地址
  5. 获取本地IP4地址,默认取第一个IP地址
  6. 将IP从long转化为String型
  7. 根据ip和掩码求网络地址
  8. 根据掩码长度求掩码
  9. 根据掩码长度求掩码反码
  10. 将127.0.0.1形式的ip地址转换成十进制整数形式
package com.hero.nms.basis.common.framework.utils;import java.net.Inet4Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;/*** IPv4 工具类* * @author 马佳飞* @date 2016年3月9日* @since com.hero.lte.ems.common.utils* */
public final class IPv4Util
{private IPv4Util(){}/*** 是否IPv4地址* @param ip* @return*/public static boolean isIPv4(String ip){try{// 匹配d.d.d.d格式(d代表1到3位数字)String regex = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}";if (!ip.matches(regex)){return false;}String[] elements = ip.split("\\.");for (String element : elements){// 判断d的值是否在[0,255]范围内if (Integer.parseInt(element) > 255){return false;}}}catch (Exception e){return false;}return true;}/*** 将IP从String转化为long型* @param ip* @return*/public static long convert2Long(String ip){if (ip == null){return 0L;}if ("".equals(ip.trim())){return 0L;}String[] ipAdds = ip.split("\\.");long ipAddress = 0;for (int i = 0; i < ipAdds.length; i++){long add = Long.valueOf(ipAdds[i]);ipAddress += (add << (ipAdds.length - 1 - i) * 8);}return ipAddress;}/*** 将IP从long转化为String型* @param ip* @return*/public static String convert2String(long ip){StringBuffer sb = new StringBuffer("");// 将高24位置0sb.append((ip & 0xFF000000) >>> 24);sb.append(".");// 将高16位置0,然后右移8位sb.append(String.valueOf((ip & 0x00FF0000) >>> 16));sb.append(".");// 将高8位置0,然后右移16位sb.append(String.valueOf((ip & 0x0000FF00) >>> 8));sb.append(".");// 直接右移24位sb.append(String.valueOf((ip & 0x000000FF)));// sb.append(".");return sb.toString();}/*** 判断两个IP是否在同一个网段内* @param firstIp* @param secondIp* @param submask* @return*/public static boolean isSameSegment(String firstIp, String secondIp, String submask){long first = convert2Long(firstIp);long second = convert2Long(secondIp);long sub = convert2Long(submask);return (first & sub) == (second & sub);}/*** 获取服务IP地址* @return* @throws SocketException*/public static String getDefaultServerIp() throws SocketException{String ip = System.getProperty("EMS.SERVER.IPADDRESS");return (ip == null) || (ip != null && "".equals(ip.trim())) ? getLocalHostInet4IP() : ip;}/*** 获取本地IP4地址,默认取第一个IP地址* @return* @throws SocketException*/public static String getLocalHostInet4IP() throws SocketException{Enumeration<NetworkInterface> e1 = NetworkInterface.getNetworkInterfaces();while (e1.hasMoreElements()){NetworkInterface ni = e1.nextElement();Enumeration<InetAddress> e2 = ni.getInetAddresses();while (e2.hasMoreElements()){InetAddress ia = e2.nextElement();if (ia instanceof Inet4Address){String ip = ia.getHostAddress();if (ip != null && !"127.0.0.1".equals(ip.trim())){return ip;}}}}return null;}// 根据网络地址和掩码反码求该网络最大Ip地址//该方法执行错误,与注释描述不一致
//    public static String getMaxIpAddres(String netId, String maskReverse)
//    {
//        String[] netIdArray = netId.split("\\.");
//        String[] maskRevertArray = maskReverse.split("\\.");
//        StringBuffer sb = new StringBuffer();
//        for (int i = 0, len = netIdArray.length; i < len; i++)
//        {
//            sb.append(Integer.parseInt(netIdArray[i]) + Integer.parseInt(maskRevertArray[i]));
//            if (i != len - 1)
//            {
//                sb.append(".");
//            }
//        }
//        return sb.toString();
//    }// 根据ip和掩码求网络地址public static String getNetAddress(String ip, String mask){String[] ips = ip.split("\\.");String[] masks = mask.split("\\.");StringBuffer sb = new StringBuffer();for (int i = 0; i < 4; i++){sb.append(Integer.parseInt(ips[i]) & Integer.parseInt(masks[i]));if (i != 3){sb.append(".");}}return sb.toString();}// 根据掩码长度求掩码public static String getMask(int maskLength){int binaryMask = 0xFFFFFFFF << (32 - maskLength);StringBuffer sb = new StringBuffer();for (int shift = 24; shift > 0; shift -= 8){sb.append(Integer.toString((binaryMask >>> shift) & 0xFF));sb.append(".");}sb.append(Integer.toString(binaryMask & 0xFF));return sb.toString();}// 根据掩码长度求掩码反码public static String getMaskRevert(int maskLength){int binaryMask = 0xFFFFFFFF << (32 - maskLength);binaryMask = binaryMask ^ 0xFFFFFFFF;StringBuffer sb = new StringBuffer(15);for (int shift = 24; shift > 0; shift -= 8){sb.append(Integer.toString((binaryMask >>> shift) & 0xFF));sb.append(".");}sb.append(Integer.toString(binaryMask & 0xFF));return sb.toString();}/*** 将127.0.0.1形式的ip地址转换成十进制整数形式* * @param longIp* @return*/public static int ip2int(String ip){if (ip == null){return 0;}if ("".equals(ip.trim())){return 0;}String[] ipArr = ip.split("\\.");int ipAddress = 0;for (int i = 0; i < ipArr.length; i++){int add = Integer.valueOf(ipArr[i]);ipAddress += (add & 0xFF) << (ipArr.length - 1 - i) * 8;}return ipAddress;}
}

会议详情

重要信息

  • 大会官网:https://ais.cn/u/vEbMBz

大会介绍

第四届公共艺术与人文发展国际学术会议 (ICPAHD 2024)将于2024年12月27-29日在中国成都举行。ICPAHD 2024将围绕“公共艺术与人文发展”的最新研究领域,为来自国内外高等院校、科学研究所、企事业单位的专家、教授、学者、工程师等提供一个分享专业经验,扩大专业网络,面对面交流新思想以及展示研究成果的国际平台,探讨本领域发展所面临的关键性挑战问题和研究方向,以期推动该领域理论、技术在高校和企业的发展和应用,也为参会者建立业务或研究上的联系以及寻找未来事业上的全球合作伙伴。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux 下搭建 Spark3 + Jupyter 环境

spark3 + pyspark + jupyter 环境搭建最近想着来玩一玩大数据, 前段时间集中过了一遍 java, 最近又看了一些基础的 scala, 我感觉吧, 我都不想学. 还是觉得用 sql, javascript, python 这种脚本语言操作起来顺手, 但这并不影响对这个大数据生态的理解和学习. 这里主要是来记录一…

LeetCode3264[K次乘运算后的最终数组I]

LeetCode3264[K次乘运算后的最终数组I]题目 链接 LeetCode3264[K次乘运算后的最终数组I] 详情实例 实例1实例2提示题解 思路 先找到最小值 然后对最小值进行操作 最后输出容器 代码 class Solution { public:int findVecMinNumIndex(vector<int> nums)//找出最小值的下标…

SpringCloudGateway网关服务实现文件上传功能

SpringCloudGateway网关服务实现文件上传功能@目录说明SpringBoot和SpringCloudGateway项目区别说明1.SpringBoot的成功案例文件上传代码pom前端代吗Controller代码 重点在:@RequestParam("file00") MultipartFile file2.SpringCloudGateway的成功案例文件上传代码C…

React.memo vs. useMemo: Major differences and use cases

from: https://blog.logrocket.com/react-memo-vs-usememo/Memoization is one of the ways to optimize performance. In this article, we’ll explore how it works in React. What is memoization? In simple terms, memoization is a process that allows us to cache …

菱形

1/定义在同一平面内,有一组邻边相等的平行四边形是菱形如图,四边形 \(ABCD\) 是一个菱形 2/性质 首先,在平行四边形原有的基础上,菱形还有一些特有的性质:对角线互相垂直 \(\because \text{平行四边形}ABCD\) \(\therefore AO = OC, BO = OD\) \(\because AB = BC\) \(\th…

个人练习前端技术使用Bootstrap、JQuery、thymeleaf

个人练习前端技术使用Bootstrap、JQuery、thymeleaf说明:本代码只是为了本人练习前后端联动技术,包含html,jquery,thymeleaf模板、ajax请求及后端功能联动,方便自己查找及使用。@目录代码场景场景1.table批量查询功能(有默认值),点击"查询最新数据"从后台查询…

uBlocklist屏蔽垃圾搜索结果

近年来特别是 Google 的中文搜索结果体验越来越差,出现了越来越多「不知所谓」的网站,这些网站通过机器翻译、直接复制的方式「拼接」而成一个网站占据了大量的搜索结果,这类网站就是——「内容牧场」。 什么是内容牧场 内容农场(或内容工厂,英文名为 content farm)是指生…

正则表达式如何匹配中文

正则表达式如何匹配中文\w匹配的仅仅是中文,数字,字母,对于国人来讲,仅匹配中文时常会用到,见下 匹配中文字符的正则表达式:[\u4e00-\u9fa5]或许你也需要匹配双字节字符,所谓“双字节字符”就是长度是两个字节(byte)的字符,比如“嗨”、“!”、“。”,汉字及中文标…

windows下电脑自定义磁盘图标,u盘图标,文件夹图标

闲言 更改图标要确定有ico(icon)格式图片文件, 文件比例1:1, 一般像素大小比例推荐128:128 确保文件后缀有显示目录闲言寻找或制作ico图片直接下载网络图片制作ico文件在线制作本地制作ico磁盘/U盘图标更改文件夹图标更改 寻找或制作ico图片 直接下载网络图片 这里推荐阿里巴巴…

Macbook M1下安装elasticsearch

一、下载安装包(Kibana 的版本需要和 Elasticsearch 的版本一致。这是官方支持的配置。) 地址分别为:ElasticSearch:https://www.elastic.co/cn/downloads/elasticsearch kibana:https://www.elastic.co/cn/downloads/kibana对于Mac M1芯片基于ARM架构应该选择Aarch64(另…

博客园sakura主题只显示每天一篇或者显示不完随笔bug的修复

关于主题只显示每天第一个博文的的bug 问题 在布置sakura博客园主题的时候,发现这个主题只会显示每一天发布的博文中最晚发布的,其他的就不发了,很奇怪。去去翻了这个主题作者的博文也说了有这bug,但由于这个主题一直没更新,所以也一直没修复。因为比较喜欢这个主题,也抱…

element Plus 设置主题背景色

其主要通过给html动态的添加一个dark类。 主要要通过dom获取html标签,然后给html标签设置className 需要在main.ts中引入dark所在的css文件:具体可以参考element Plus的官网