返回顶部
首页 > 资讯 > 精选 >SpringBoot文件上传控制及Java怎么获取和判断文件头信息
  • 420
分享到

SpringBoot文件上传控制及Java怎么获取和判断文件头信息

springbootjava 2023-05-30 18:05:04 420人浏览 泡泡鱼
摘要

这篇文章给大家分享的是有关SpringBoot文件上传控制及Java怎么获取和判断文件头信息的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。首先,是建立一个标准的springBoot 的工程,这里使用的IDE是In

这篇文章给大家分享的是有关SpringBoot文件上传控制及Java怎么获取和判断文件头信息的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

首先,是建立一个标准的springBoot 的工程,这里使用的IDE是Intellij idea,为了方便配置,将默认的配置文件替换为了application.yml。

SpringBoot文件上传控制及Java怎么获取和判断文件头信息

在index.html中进行文件上传功能,这里使用的文件上传方式是ajax,当然也可以按照自己的具体要求使用传统的表单文件上传。

<!DOCTYPE html> <html lang="en"> <head>  <meta charset="UTF-8">  <title>上传测试</title>  <script type="text/javascript" src="js/Jquery-3.2.1.min.js"></script> </head> <body>  <input id="file" type="file" name="file"/>  <br/>  <button id="upload" onclick="doUpload()">上传</button>  <progress id="progressBar" value="0" max="100"></progress>  <script>   function doUpload() {    var fileObj = document.getElementById("file").files[0]; // js 获取文件对象    var FileController = "/upload";     // 接收上传文件的后台地址    // FORMData 对象    var form = new FormData();    form.append("file",fileObj);    // XMLHttpRequest 对象    var xhr = new XMLHttpRequest();    //为请求添加返回处理函数    xhr.onreadystatechange=function () {     if(this.readyState == 4 && this.status == 200){      var b = this.responseText;      if(b == "success"){       alert("上传成功!");      }else{       alert("上传失败!");      }     }    };    xhr.open("post", FileController, true);    //使用进度条记录上传进度    xhr.upload.addEventListener("progress", progressFunction, false);    xhr.send(form);   }   function progressFunction(evt) {    var progressBar = document.getElementById("progressBar");    var percentageDiv = document.getElementById("percentage");    if (evt.lengthComputable) {     progressBar.max = evt.total;     progressBar.value = evt.loaded;     percentageDiv.innerHTML = Math.round(evt.loaded / evt.total * 100) + "%";    }   }  </script> </body> </html>

在MainController添加文件上传的api,并返回上传结果

@PostMapping("/upload")  @ResponseBody  public String upload(httpservletRequest request, @RequestParam("file") MultipartFile file) {   String path = "E://upload//";   String fileName = file.getOriginalFilename();   System.out.println(fileName);   File targetFile = new File(path);   if (!targetFile.exists()) {    targetFile.mkdirs();   }   File saveFile=new File(path+fileName);   // 保存   try {    file.transferTo(saveFile);    return "success";   } catch (Exception e) {    e.printStackTrace();    return "fail";   }  }

这时,我们进行测试,就可以发现,文件上传已经完成了。

SpringBoot文件上传控制及Java怎么获取和判断文件头信息

SpringBoot文件上传控制及Java怎么获取和判断文件头信息

很多时候,我们在进行文件上传时,特别是向普通用户开放文件上传功能时,需要对上传文件的格式进行控制,以防止黑客将病毒脚本上传。单纯的将文件名的类型进行截取的方式非常容易遭到破解,上传者只需要将病毒改换文件名便可以完成上传。

这时候我们可以读取文件的十六进制的文件头,来判断文件真正的格式。

因为我们发现,在我们读取文件的二进制数据并将其转换为十六进制时,同类型文件的文件头数据是相同的,即使改变了其后缀,这个数据也不会改变,例如,png文件的文件头为“89504E47”。

首先,我们将文件的数据进行读取

public class FileUtil {  public static String getFileHeader( MultipartFile file) {   InputStream is = null;   String value = null;   try {    is = file.getInputStream();    byte[] b = new byte[4];    is.read(b, 0, b.length);    value = bytesToHexString(b);   } catch (Exception e) {   } finally {    if (null != is) {     try {      is.close();     } catch (IOException e) {     }    }   }   return value;  }  private static String bytesToHexString(byte[] src) {   StringBuilder builder = new StringBuilder();   if (src == null || src.length <= 0) {    return null;   }   String hv;   for (int i = 0; i < src.length; i++) {    hv = Integer.toHexString(src[i] & 0xFF).toUpperCase();    if (hv.length() < 2) {     builder.append(0);    }    builder.append(hv);   }   System.out.println(builder.toString());   return builder.toString();  } }

然后在文件上传的api中进行调用

FileUtil.getFileHeader(file)

这时候,我们只需要进行简单的字符串比对,判断调用的返回值是否为“89504E47”,就可以知道上传的是否为png文件。

下面看下 Java 获取和判断文件头信息

 import java.io.FileInputStream; import java.io.IOException; import java.util.HashMap;  public class GetTypeByHead {  // 缓存文件头信息-文件头信息  public static final HashMap<String, String> mFileTypes = new HashMap<String, String>();  static {   // images   mFileTypes.put("FFD8FF", "jpg");   mFileTypes.put("89504E47", "png");   mFileTypes.put("47494638", "gif");   mFileTypes.put("49492A00", "tif");   mFileTypes.put("424D", "bmp");   //   mFileTypes.put("41433130", "dwg"); // CAD   mFileTypes.put("38425053", "psd");   mFileTypes.put("7B5C727466", "rtf"); // 日记本   mFileTypes.put("3C3F786D6C", "xml");   mFileTypes.put("68746D6C3E", "html");   mFileTypes.put("44656C69766572792D646174653A", "eml"); // 邮件   mFileTypes.put("D0CF11E0", "doc");   mFileTypes.put("5374616E64617264204A", "mdb");   mFileTypes.put("252150532D41646F6265", "ps");   mFileTypes.put("255044462D312E", "pdf");   mFileTypes.put("504B0304", "docx");   mFileTypes.put("52617221", "rar");   mFileTypes.put("57415645", "wav");   mFileTypes.put("41564920", "avi");   mFileTypes.put("2E524D46", "rm");   mFileTypes.put("000001BA", "mpg");   mFileTypes.put("000001B3", "mpg");   mFileTypes.put("6D6F6F76", "mov");   mFileTypes.put("3026B2758E66CF11", "asf");   mFileTypes.put("4D546864", "mid");   mFileTypes.put("1F8B08", "gz");   mFileTypes.put("4D5A9000", "exe/dll");   mFileTypes.put("75736167", "txt");  }    public static String getFileType(String filePath) {   System.out.println(getFileHeader(filePath));   System.out.println(mFileTypes.get(getFileHeader(filePath)));   return mFileTypes.get(getFileHeader(filePath));  }    public static String getFileHeader(String filePath) {   FileInputStream is = null;   String value = null;   try {    is = new FileInputStream(filePath);    byte[] b = new byte[4];        is.read(b, 0, b.length);    value = bytesToHexString(b);   } catch (Exception e) {   } finally {    if (null != is) {     try {      is.close();     } catch (IOException e) {     }    }   }   return value;  }    private static String bytesToHexString(byte[] src) {   StringBuilder builder = new StringBuilder();   if (src == null || src.length <= 0) {    return null;   }   String hv;   for (int i = 0; i < src.length; i++) {    // 以十六进制(基数 16)无符号整数形式返回一个整数参数的字符串表示形式,并转换为大写    hv = Integer.toHexString(src[i] & 0xFF).toUpperCase();    if (hv.length() < 2) {     builder.append(0);    }    builder.append(hv);   }   System.out.println(builder.toString());   return builder.toString();  }  public static void main(String[] args) throws Exception {   final String fileType = getFileType("D:\\Ry4S_JAVA.dll");   System.out.println(fileType);  } }

springboot是什么

springboot一种全新的编程规范,其设计目的是用来简化新Spring应用的初始搭建以及开发过程,SpringBoot也是一个服务于框架的框架,服务范围是简化配置文件。

感谢各位的阅读!关于“SpringBoot文件上传控制及Java怎么获取和判断文件头信息”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: SpringBoot文件上传控制及Java怎么获取和判断文件头信息

本文链接: https://lsjlt.com/news/220310.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • SpringBoot文件上传控制及Java怎么获取和判断文件头信息
    这篇文章给大家分享的是有关SpringBoot文件上传控制及Java怎么获取和判断文件头信息的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。首先,是建立一个标准的SpringBoot 的工程,这里使用的IDE是In...
    99+
    2023-05-30
    springboot java
  • Java如何实现获取和判断文件头信息工具类
    小编给大家分享一下Java如何实现获取和判断文件头信息工具类,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Java实现的获取和判断文件头信息工具类用法,具体如下:...
    99+
    2023-05-30
    java
  • Springboot怎么上传文件或头像
    本篇内容主要讲解“Springboot怎么上传文件或头像”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Springboot怎么上传文件或头像”吧!1. 在配置文件中指定外部环境, 注入到代码中头...
    99+
    2023-07-06
  • JavaScript获取上传文件相关信息示例详解
    目录前题场景处理方式图片文件音频文件判断处理分析总结前题场景 在开发过程中,文件上传是再熟悉不过的场景了,但是根据实际使用情况对上传文件的限制又各有不同。需要对本地上传文件进行相应的...
    99+
    2024-04-02
  • ASP.net中怎么判断上传文件的类型
    本篇文章给大家分享的是有关ASP.net中怎么判断上传文件的类型,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。一、 安全性比较低,把文本文件1.txt改成1.jpg照样可以上传...
    99+
    2023-06-17
  • jQuery怎么获取上传文件的名称
    要获取上传文件的名称,可以使用jQuery的`val()`函数来获取文件输入框的值,然后使用JavaScript的`split()`...
    99+
    2023-08-11
    jQuery
  • Python中怎么获取文件的详细信息
    本篇文章给大家分享的是有关Python中怎么获取文件的详细信息,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Python文件时间time_of_last_access ...
    99+
    2023-06-17
  • SpringBoot中怎么上传和下载文件
    在SpringBoot中上传和下载文件可以通过以下步骤实现: 上传文件: @RestController public clas...
    99+
    2024-03-07
    SpringBoot
  • SpringBoot怎么通过配置文件限制文件上传大小
    这篇文章主要介绍SpringBoot怎么通过配置文件限制文件上传大小,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!通过配置文件(yml,properties)限制文件上传大小properties类型配置文件设置#&n...
    99+
    2023-06-29
  • 使用python怎么获取文件的部分信息
    这篇文章将为大家详细讲解有关使用python怎么获取文件的部分信息,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python有哪些常用库python常用的库:1.requesuts;2.sc...
    99+
    2023-06-14
  • 怎么通过拖曳获取文件信息的bat
    这篇文章主要介绍了怎么通过拖曳获取文件信息的bat,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。获取文件属性@echo offecho 无后缀名:&nbs...
    99+
    2023-06-08
  • 轻松获取图片和视频文件的Exif信息-Java篇
    前言        随着现在实景地图的如火如荼建设,无人机等航拍测绘手段的不断升级,我们在获取全景照片或者正射影像,全景视频等数据上更加快速、便捷。由于无人机本身不进行相关数据的处理,比如全景地图的生成、视频的信息解析等。以全景照片为例,无...
    99+
    2023-10-01
    机器学习 元数据提取 大数据
  • Java怎么从本地文件复制到网络文件上传
    今天小编给大家分享一下Java怎么从本地文件复制到网络文件上传的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。文件复制文件复制...
    99+
    2023-07-06
  • 利用java怎么对二进制文件进行判断
    利用java怎么对二进制文件进行判断?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。java 判断二进制文件的方法代码实现:public static boole...
    99+
    2023-05-31
    java ava
  • java maven项目怎么读取配置文件信息
    这篇文章给大家分享的是有关java maven项目怎么读取配置文件信息的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。maven项目读取配置文件信息目录结构主类App.javapackage com.to...
    99+
    2023-06-25
  • Vue+Node怎么实现大文件上传和断点续传
    本篇内容介绍了“Vue+Node怎么实现大文件上传和断点续传”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!源代码断点续传、分片上传、秒传、重...
    99+
    2023-06-30
  • Java中SpringBoot拦截器与文件上传怎么实现
    今天小编给大家分享一下Java中SpringBoot拦截器与文件上传怎么实现的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。拦...
    99+
    2023-06-30
  • 怎么提取Playwright录制文件中的元素定位信息
    本篇内容主要讲解“怎么提取Playwright录制文件中的元素定位信息”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么提取Playwright录制文件中的元素定位信息”吧!引言最近组内推行Pl...
    99+
    2023-06-25
  • JAVA怎么获取当前项目和文件所在路径
    这篇文章给大家分享的是有关JAVA怎么获取当前项目和文件所在路径的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。直接上代码: //当前项目下路径  File file&nbs...
    99+
    2023-06-06
  • Java怎么利用Socket和IO流实现文件的上传与下载
    这篇文章主要介绍了Java怎么利用Socket和IO流实现文件的上传与下载的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java怎么利用Socket和IO流实现文件的上传与下载文章都会有所收获,下面我们一起来看...
    99+
    2023-06-30
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作