背景:在编写接收上传文件的后端接口时,我们可能需要对文件进行一系列的校验工作,如果在写入上传文件到本地(资源服务器)之后才进行校验,是不太合适的,一是浪费带宽二是浪费内存,先将文件通过流的方式转存为临时文件,等校验通过之后再真正写入本地(上传资源服务器),是一个不错的选择

原理:输入输出流写入文件

/*** 临时文件路径前缀*/private static final String TEMP_FILEPATH = "/opt/temp";/*** 转存临时文件(使用后请删除:下面有deleteFile)** @param multipartFile 待转存文件* @return 临时文件绝对路径*/private static String storageTempFile(MultipartFile multipartFile) {// 文件无效,无需转存File toFile = null;if (multipartFile.getSize() <= 0) {return StringUtils.EMPTY;} else {// 文件原名称String originalFilename = multipartFile.getOriginalFilename();// 文件格式String fileFormat = Objects.requireNonNull(originalFilename).substring(originalFilename.lastIndexOf("."));// 生成文件idString uuid = UUID.randomUUID().toString().trim().replaceAll("-", "");// 文件全路径(绝对路径+文件名称)toFile = new File(TEMP_FILEPATH + File.separator + uuid + fileFormat);String absolutePath = null;try {// 获取临时文件所需要转存的文件夹路劲,不存在则创建absolutePath = toFile.getCanonicalPath();String dirPath = absolutePath.substring(0, absolutePath.lastIndexOf(File.separator));File dir = new File(dirPath);if (!dir.exists()) {dir.mkdirs();}// 流写入InputStream ins = multipartFile.getInputStream();inputStreamToFile(ins, toFile);ins.close();} catch (IOException e) {e.printStackTrace();}// 返回绝对路径return absolutePath;}}/*** 流写入文件** @param inputStream 文件输入流* @param file        输出文件*/private static void inputStreamToFile(InputStream inputStream, File file) {try {OutputStream os = new FileOutputStream(file);int bytesRead = 0;byte[] buffer = new byte[8192];while ((bytesRead = inputStream.read(buffer, 0, 8192)) != -1) {os.write(buffer, 0, bytesRead);}os.close();inputStream.close();} catch (Exception e) {e.printStackTrace();}}/*** 删除本地文件** @param file 要删除的文件*/private static void deleteFile(File file) {if (file != null) {File del = new File(file.toURI());del.delete();}}

Java工具类:接收接口文件并转存到本地临时文件夹相关推荐

  1. java工具类之大文件分片(切割)与合并

    之前在潭州教育教学网站上看了一个视频关于java大文件的分片与合并 自己在练习的时候遇到一些坑,调试了好长时间 代码如下: 首先配置一个专门放参数的类 SplitFileParam public cl ...

  2. java工具类获取文件扩展名与content-type、http与content-type映射关系

    java工具类获取文件扩展名与content-type.http与content-type映射关系 大家好,我是酷酷的韩~ 一.对应关系参考地址: http://doc.chacuo.net/cont ...

  3. 【Java工具类】(22)—服务器传文件工具类SCp和Sftp

    Java工具类(22)-服务器传文件工具类SCp和Sftp 1.Scp package com.awifi.capacity.docker.manager.utils;import ch.ethz.s ...

  4. Java工具类——通过配置XML验证Map

    Java工具类--通过配置XML验证Map 背景 在JavaWeb项目中,接收前端过来的参数时通常是使用我们的实体类进行接收的.但是呢,我们不能去决定已经搭建好的框架是怎么样的,在我接触的框架中有一种 ...

  5. java xml最火的的工具_几种高效的Java工具类推荐

    本文将介绍了十二种常用的.高效的Java工具类 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类. 在开发中,使用这些工具类,不仅可以提高编码效率,还 ...

  6. 验证码识别服务器,一个非常好用的验证码识别工具类api接口

    一个非常好用的验证码识别工具类api接口 群发?批量操作?验证码?可能乖孩子对于这些单个有了解,但是对于合在一起就不知道其存在的意义.这个对 于我们日常的生活可能是没有什么用处的,但是对于需要批量检测 ...

  7. 干货:排名前 16 的 Java 工具类!

    2019独角兽企业重金招聘Python工程师标准>>> 干货:排名前 16 的 Java 工具类!   在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最 ...

  8. 排名前 16 的 Java 工具类

    转载来自微信公众号:Java 技术栈.如有侵权,请联系作者删除!! 在 Java 中,工具类定义了一组公共方法,这篇文章将介绍 Java 中使用最频繁及最通用的 Java 工具类.以下工具类.方法按使 ...

  9. beanutils工具类_16 个超级实用的 Java 工具类!

    在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类.以下工具类.方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码. 一. ...

最新文章

  1. python的pandas_python之pandas(一)
  2. Android 分享机顶盒项目的封装类《GridView》
  3. 18岁的他从月薪2000到月薪11000经历了什么?
  4. linux 伪终端 pty 简介
  5. 真不知写什么了,也就是很久没有做什么了
  6. sql并行度_SQL Server最大并行度的重要性
  7. r语言 四格画图_R绘图基础(一)
  8. Thinking in Java 11.3 添加一组元素
  9. JParticles 2.0 发布,打造炫酷的粒子特效
  10. 【python】10行代码下载B站弹幕
  11. 整形美容的消费者心理分析
  12. Cannot construct instance of `com.baomidou.mybatisplus.core.metadata.IPage`
  13. java手机游戏星际争霸_java Swing实现的星际争霸游戏源码
  14. 扫描车牌是什么神经网络,卷积神经网络车牌识别
  15. matlab 画折线图(美化)
  16. 磁带库连接服务器协议,如何确定磁带库设备和OS设备文件的对应关系
  17. 关于双字节字符(16 byte)
  18. 农行K宝无法使用,设备管理器显示叹号
  19. 哥们,B/S了解吗?——啥玩意,我是敲代码的
  20. 学习记录《Simulink 快速入门 —— 官方Help文档》

热门文章

  1. linux 查看电池日志,Ubuntu battery 笔记本电池信息查询
  2. C语言(递归)使用递归方法,求解X^n
  3. 不论你是大众,科班和非科班,我这边整理很久,总结出的学习路线,还不快卷起来
  4. 最大奇数与最小偶数之差的绝对值
  5. 信奥中的数学 数论 第2讲 奇数和偶数
  6. 北京2018年计算机技校,2018年北京十大技校排名 排名前十的学校有哪些?
  7. 使用vba获取excel每个sheet页的名称,并在目录页生成超级链接
  8. ExecuteNonQuery(),ExecuteScalar(),ExecuteReader的用法-转
  9. 健康知识-健康四大基石(维多利亚宣言)
  10. 解决opencv中cv2.VideoCapture()函数打开USB视频慢的问题