接口代码

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile; import java.io.*; @RestController
@RequestMapping(value = "/file")
@Slf4j
public class FileController { /**
* windows下的文件路径
*/
private final String File_PATH = "F:/upload/temp"; @PostMapping(value = "/upload")
String uploadFileBufferToLocal(MultipartFile file) { //将文件缓冲到本地
boolean localFile = createLocalFile(File_PATH, file);
if(!localFile){
log.error("Create local file failed!");
return "Create local file failed!";
}
log.info("Create local file successfully"); return "Create local file successfully";
} /**
* 通过上传的文件名,缓冲到本地,后面才能解压、验证
* @param filePath 临时缓冲到本地的目录
* @param file
*/
public boolean createLocalFile(String filePath,MultipartFile file) {
File localFile = new File(filePath);
//先创建目录
localFile.mkdirs(); String originalFilename = file.getOriginalFilename();
String path = filePath+"/"+originalFilename; log.info("createLocalFile path = {}", path); localFile = new File(path);
FileOutputStream fos = null;
InputStream in = null;
try { if(localFile.exists()){
//如果文件存在删除文件
boolean delete = localFile.delete();
if (delete == false){
log.error("Delete exist file \"{}\" failed!!!",path,new Exception("Delete exist file \""+path+"\" failed!!!"));
}
}
//创建文件
if(!localFile.exists()){
//如果文件不存在,则创建新的文件
localFile.createNewFile();
log.info("Create file successfully,the file is {}",path);
} //创建文件成功后,写入内容到文件里
fos = new FileOutputStream(localFile);
in = file.getInputStream();
byte[] bytes = new byte[1024]; int len = -1; while((len = in.read(bytes)) != -1) {
fos.write(bytes, 0, len);
} fos.flush();
log.info("Reading uploaded file and buffering to local successfully!");
} catch (FileNotFoundException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}finally {
try {
if(fos != null) {
fos.close();
}
if(in != null) {
in.close();
}
} catch (IOException e) {
log.error("InputStream or OutputStream close error : {}", e);
return false;
}
} return true;
}
}

过程是:

首先接口接收文件;

创建将要缓冲文件的目录,存在指定目录就不创建;

判断该目录是否有重复的文件名,如果有,先删除再生成,如果没有,就生成文件;

然后将通过文件流以每次1024bytes写入指定目录的文件;

最后关闭流。

更多Java文件操作可使用强大的Java文件工具:org.apache.commons.io.FileUtils;

Java文件上传:Restful接口接收上传文件,缓存在本地的更多相关文章

  1. Java NIO.2 使用Path接口来监听文件、文件夹变化

    Java7对NIO进行了大的改进,新增了许多功能: 对文件系统的访问提供了全面的支持 提供了基于异步Channel的IO 这些新增的IO功能简称为 NIO.2,依然在java.nio包下. 早期的Ja ...

  2. 由于ios由UIWebView换成了WKWebview内核后导致webview请求接口文件上传,后台接收不到文件

    2020年4月起App Store将不再接受使用UIWebView的新App上架.2020年12月起将不再接受使用UIWebView的App更新. 解决后台文件接收不到的问题 function GLA ...

  3. Java调用Azkaban的RestFul接口

    1.绕过ssl认证的工具类: import java.security.KeyManagementException; import java.security.NoSuchAlgorithmExce ...

  4. 【快学springboot】2.Restful简介,SpringBoot构建Restful接口

    Restful简介 Restful一种软件架构风格.设计风格,而不是标准,只是提供了一组设计原则和约束条件.它主要用于客户端和服务器交互类的软件.基于这个风格设计的软件可以更简洁,更有层次,更易于实现 ...

  5. Office系列(1)---将Office文件(Word、PPT、Excel)转换为PDF文件

    需求: 将Office文件作为文章并在网页上预览,主要为(Word.PPT.Excel)3种类型文件. 研究了一下,找到了两种解决方案 直接调用微软的在线预览功能实现(预览前提:预览资源必须可以直接通 ...

  6. Office系列---将Office文件(Word、PPT、Excel)转换为PDF文件,提取Office文件(Word、PPT)中的所有图片

    将Office文件转换为PDF文件,提取Office文件中的所有图片 1.Office系列---将Office文件(Word.PPT.Excel)转换为PDF文件 1.1 基于Office实现的解决方 ...

  7. 你真的了解字典(Dictionary)吗? C# Memory Cache 踩坑记录 .net 泛型 结构化CSS设计思维 WinForm POST上传与后台接收 高效实用的.NET开源项目 .net 笔试面试总结(3) .net 笔试面试总结(2) 依赖注入 C# RSA 加密 C#与Java AES 加密解密

    你真的了解字典(Dictionary)吗?   从一道亲身经历的面试题说起 半年前,我参加我现在所在公司的面试,面试官给了一道题,说有一个Y形的链表,知道起始节点,找出交叉节点.为了便于描述,我把上面 ...

  8. java nio 写一个完整的http服务器 支持文件上传 chunk传输 gzip 压缩 使用过程 和servlet差不多

    java nio 写一个完整的http服务器  支持文件上传   chunk传输    gzip 压缩      也仿照着 netty处理了NIO的空轮询BUG        本项目并不复杂 代码不多 ...

  9. 微信小程序接口请求/form-data/单文件、多文件上传

    1.普通的微信请求封装 1 const http = (options) =>{ 2 return new Promise((resolve,reject) => { 3 wx.reque ...

随机推荐

  1. django,flask接口初试

    -------------django 1.需要安装的环境 pip install django pip install djangorestframework ## restful组件 pip in ...

  2. jQuery选择器详解

    根据所获取页面中元素的不同.可以将jQuery选择器分为:四大类,其中过滤选择器在分为六小类 jQuery选择器 基本选择器   层次选择器   过滤选择器 简单过滤选择器 内容过滤选择器 可见性过滤 ...

  3. 在Django中运行脚本文件以及打印出SQL语句。

    Django终端打印SQL语句 在Django项目的settings.py文件中,在最后复制粘贴如下代码: LOGGING = { 'version': 1, 'disable_existing_lo ...

  4. mock生成随机数的各种情况

    [发现一篇好的文章,用来自己作参考] 接口测试时需要生成各种正则表达式的随机数进行边界值测试,字符串测试等: 比如生成数字,字母,邮箱,一段中文,一段英文 推荐1:生成随机数的多种情况 http:// ...

  5. 【Git使用】sourcetree跳过注册的方法(转)

    当前只有Win的版本,Mac自行百度(笑) 很多人用git命令行不熟练,那么可以尝试使用sourcetree进行操作. 然鹅~~sourcetree又一个比较严肃的问题就是,很多人不会跳过注册或者操作 ...

  6. linux系统 python升级创建虚拟环境

    Python3.3以上的版本通过venv模块原生支持虚拟环境,可以代替之前的virtualenv. 该venv模块提供了创建轻量级“虚拟环境”,提供与系统Python的隔离支持.每一个虚拟环境都有其自 ...

  7. [转]asp+oracle分页

    PageSize:每页显示的记录数.PageCount:根据用户设定好的PageSize和表中的总记录数,系统自动算出总页数.RecordCount:表中的总记录数.AbsolutePage:表示当前 ...

  8. PHP 扩展在 Linux(centos7)系统下的编译与安装 以 mysqli 为例

    (操作系统 Centos7,环境版本 php7) 01,进入到 PHP 解压后的源码包的的 ext 文件夹 02,查看是否存在 mysqli 扩展 => ls, 如果不存在需要去响应网站下载 ( ...

  9. leetcode1013

    class Solution(object): def canThreePartsEqualSum(self, A: 'List[int]') -> bool: n = len(A) sums ...

  10. 对象 Object

    在js 中创建最简单的对象,然后给它添加属性或者方法 示例如下: var obj = new Object(); //或者 var obj = {}; obj.name = '张三'; obj.fun ...