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

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

image.png

说明:
有的项目会涉及文件上传,比如“更换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位置0
        sb.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;
    }
}

会议详情

image.png

重要信息

大会介绍

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

目录
相关文章
|
10天前
|
XML Java Kotlin
springboot + minio + kkfile实现文件预览
本文介绍了如何在容器中安装和启动kkfileviewer,并通过Spring Boot集成MinIO实现文件上传与预览功能。首先,通过下载kkfileviewer源码并构建Docker镜像来部署文件预览服务。接着,在Spring Boot项目中添加MinIO依赖,配置MinIO客户端,并实现文件上传与获取预览链接的接口。最后,通过测试验证文件上传和预览功能的正确性。
springboot + minio + kkfile实现文件预览
|
23天前
|
easyexcel Java UED
SpringBoot中大量数据导出方案:使用EasyExcel并行导出多个excel文件并压缩zip后下载
在SpringBoot环境中,为了优化大量数据的Excel导出体验,可采用异步方式处理。具体做法是将数据拆分后利用`CompletableFuture`与`ThreadPoolTaskExecutor`并行导出,并使用EasyExcel生成多个Excel文件,最终将其压缩成ZIP文件供下载。此方案提升了导出效率,改善了用户体验。代码示例展示了如何实现这一过程,包括多线程处理、模板导出及资源清理等关键步骤。
|
25天前
|
消息中间件 Java 大数据
大数据-56 Kafka SpringBoot与Kafka 基础简单配置和使用 Java代码 POM文件
大数据-56 Kafka SpringBoot与Kafka 基础简单配置和使用 Java代码 POM文件
56 2
|
1月前
|
Java 关系型数据库 数据库连接
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第3天】Spring Boot项目中数据库连接问题可能源于配置错误或依赖缺失。YAML配置文件的格式不正确,如缩进错误,会导致解析失败;而数据库驱动不匹配、连接字符串或认证信息错误同样引发连接异常。解决方法包括检查并修正YAML格式,确认配置属性无误,以及添加正确的数据库驱动依赖。利用日志记录和异常信息分析可辅助问题排查。
109 10
|
1月前
|
存储 前端开发 Java
Spring Boot 集成 MinIO 与 KKFile 实现文件预览功能
本文详细介绍如何在Spring Boot项目中集成MinIO对象存储系统与KKFileView文件预览工具,实现文件上传及在线预览功能。首先搭建MinIO服务器,并在Spring Boot中配置MinIO SDK进行文件管理;接着通过KKFileView提供文件预览服务,最终实现文档管理系统的高效文件处理能力。
191 11
|
7天前
|
缓存 Java 程序员
Java|SpringBoot 项目开发时,让 FreeMarker 文件编辑后自动更新
在开发过程中,FreeMarker 文件编辑后,每次都需要重启应用才能看到效果,效率非常低下。通过一些配置后,可以让它们免重启自动更新。
15 0
|
1月前
|
Java 关系型数据库 MySQL
SpringBoot项目使用yml文件链接数据库异常
【10月更文挑战第4天】本文分析了Spring Boot应用在连接数据库时可能遇到的问题及其解决方案。主要从四个方面探讨:配置文件格式错误、依赖缺失或版本不兼容、数据库服务问题、配置属性未正确注入。针对这些问题,提供了详细的检查方法和调试技巧,如检查YAML格式、验证依赖版本、确认数据库服务状态及用户权限,并通过日志和断点调试定位问题。
|
27天前
|
JavaScript 前端开发 Java
Springboot+vue实现文件的下载和上传
这篇文章介绍了如何在Springboot和Vue中实现文件的上传和下载功能,包括后端控制器的创建、前端Vue组件的实现以及所需的依赖配置。
158 0
|
19天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
109 1
|
3天前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 构建一个具有动态路由和菜单功能的前后端分离应用。首先,创建并配置 Spring Boot 项目,实现后端 API;然后,使用 Ant Design Pro Vue 创建前端项目,配置动态路由和菜单。通过具体案例,展示了如何快速搭建高效、易维护的项目框架。
78 62

热门文章

最新文章