1、放开上传限制

servlet:
multipart:
enabled: true #默认支持文件上传
max-file-size: -1 #不做限制
max-request-size: -1 #不做限制
2、设置上传地址
#上传地址
z:
url: http://127.0.0.1:9087/andon/file/
upload: /home/project/file/andon/fileUpload
#获取配置文件地址
@Value("${z.upload}")
private String fileUploadPath;

@Value("${z.url}")
private String fileUploadUrl;

#上传代码
@ApiOperation("8.0 附件_上传")
@PostMapping(value = "/upload")
public Result upload(@RequestParam("file") MultipartFile file,
HttpServletRequest req) throws IOException {
Map<String, Object> map = new HashMap<>();
try {
//文件上传
String hostAddress = InetAddress.getLocalHost().getHostAddress();//获取文件的名称
String filename = file.getOriginalFilename();
//上传的文件夹
String filePath = fileUploadPath;
java.io.File path = new java.io.File(filePath);
if (!path.exists()) {
path.mkdirs();
}
String uuid = IdUtil.simpleUUID();
String fileStr = filename.substring(filename.lastIndexOf("."));
String newFileName = uuid + fileStr;
//上传的文件
String rootFilePath = filePath + newFileName;
log.info("文件写入:" + rootFilePath);
//上传
FileUtil.writeBytes(file.getBytes(), rootFilePath);//使用Hutool工具包将我们接收到文件保存到rootFilePath中
log.info("文件写入成功!");
map.put("filename", filename);
map.put("path", fileUploadUrl + newFileName);
map.put("size", file.getSize());
map.put("loadPath",rootFilePath);
} catch (Exception e) {
log.info("文件上传失败:", e);
}
return Result.success(map);
}

#下载代码

@GetMapping("/{flag}")
@ApiOperation("8.1 附件_下载")
public void getFiles(@PathVariable String flag, HttpServletResponse response, HttpServletRequest req) {
OutputStream os;//新建一个输出流对象
String basePath = fileUploadPath;
List<String> fileNames = FileUtil.listFileNames(basePath);//获取所有的文件名称
String fileName = fileNames.stream().filter(name -> name.contains(flag)).findAny().orElse("");//找到跟参数一致的文件
try {
if (StrUtil.isNotEmpty(fileName)) {
java.io.File file = new java.io.File(basePath + fileName);
long length = file.length();
response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
response.setContentType("application/octet-stream");
response.addHeader("totalSize", String.valueOf(length));
response.setContentLengthLong(length);
byte[] bytes = FileUtil.readBytes(file);//通过文件的路径读取文件字节流
os = response.getOutputStream();//通过response的输出流返回文件
os.write(bytes);
os.flush();
os.close();
}
} catch (Exception e) {
log.info("文件下载失败:",e);
}

}

Springboot 和hutool文件上传下载的更多相关文章

  1. Springboot(九).多文件上传下载文件(并将url存入数据库表中)

    一.   文件上传 这里我们使用request.getSession().getServletContext().getRealPath("/static")的方式来设置文件的存储 ...

  2. Spring Boot2(十四):单文件上传/下载,文件批量上传

    文件上传和下载在项目中经常用到,这里主要学习SpringBoot完成单个文件上传/下载,批量文件上传的场景应用.结合mysql数据库.jpa数据层操作.thymeleaf页面模板. 一.准备 添加ma ...

  3. springboot整合vue实现上传下载文件

    https://blog.csdn.net/yhhyhhyhhyhh/article/details/89888953 文章目录 springboot整合vue实现上传下载文件 1上传下载文件api文 ...

  4. SpringBoot入门一:基础知识(环境搭建、注解说明、创建对象方法、注入方式、集成jsp/Thymeleaf、logback日志、全局热部署、文件上传/下载、拦截器、自动配置原理等)

    SpringBoot设计目的是用来简化Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,SpringBoot致力于在蓬勃发 ...

  5. SpringBoot项目实现文件上传和邮件发送

    前言 本篇文章主要介绍的是SpringBoot项目实现文件上传和邮件发送的功能. SpringBoot 文件上传 说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码. 开发准备 环境要 ...

  6. SpringMVC文件上传下载(单文件、多文件)

    前言 大家好,我是bigsai,今天我们学习Springmvc的文件上传下载. 文件上传和下载是互联网web应用非常重要的组成部分,它是信息交互传输的重要渠道之一.你可能经常在网页上传下载文件,你可能 ...

  7. 一、手把手教你docker搭建fastDFS文件上传下载服务器

    在搭建fastDFS文件上传下载服务器之前,你需要准备的有一个可连接的linux服务器,并且该linux服务器上已经安装了docker,若还有没安装docker的,先百度自行安装docker. 1.执 ...

  8. Struts的文件上传下载

    Struts的文件上传下载 1.文件上传 Struts2的文件上传也是使用fileUpload的组件,这个组默认是集合在框架里面的.且是使用拦截器:<interceptor name=" ...

  9. Android okHttp网络请求之文件上传下载

    前言: 前面介绍了基于okHttp的get.post基本使用(http://www.cnblogs.com/whoislcj/p/5526431.html),今天来实现一下基于okHttp的文件上传. ...

  10. Selenium2学习-039-WebUI自动化实战实例-文件上传下载

    通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div.a ...

随机推荐

  1. Jest + React 单元测试最佳实践

    我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 前言 单元测试是一种用于测试"单元"的软件测试方 ...

  2. STM32F4寄存器初始化:编码器

    RCC->APB1ENR|=1<<0; //TIM2时钟使能 RCC->APB1ENR|=1<<1; //TIM3时钟使能 RCC->APB1ENR|=1&l ...

  3. SnowFlake 雪花算法详解与实现 & MP中的应用

    BackGround 现在的服务基本是分布式,微服务形式的,而且大数据量也导致分库分表的产生,对于水平分表就需要保证表中 id 的全局唯一性. 对于 MySQL 而言,一个表中的主键 id 一般使用自 ...

  4. 【TS】函数重载--可选参数--默认参数

    可选参数--默认参数 在ts中定义的数据类型,某些情况下只需要传入定义数据类型的一部分参数,比如:id .name.age.address,此时需要修改用户的名称,那么只需要传入id.name就够了: ...

  5. Nginx基础02:配置文件nginx.conf(Part1)

    我们使用Nginx主要是通过其配置文件nginx.conf来实现的.按照一定的规则,编写特定的指令,可以帮助我们实现对Web服务的控制!所以,学习Nginx的用法,几乎就是学习nginx.conf! ...

  6. Hbase学习二:Hbase数据特点和架构特点

    转载请注明出处: 1.Hbase数据特点 大:一个表可以有上亿行,上百万列. 面向列:面向列表(簇)的存储和权限控制,列(簇)独立检索. 稀疏:对于为空(NULL)的列,并不占用存储空间,因此,表可以 ...

  7. .net 下SSE使用demo

    所谓SSE,就是浏览器向服务器发送一个HTTP请求,然后服务器不断单向地向浏览器推送"信息"(message).这种信息在格式上很简单,就是"信息"加上前缀&q ...

  8. (八) Mysql 脑图总结

  9. react的useRef

    在使用RN动画的时候,看到这样的代码: const App = () => { const fadeAnim = useRef(new Animated.Value(0)).current; / ...

  10. 实践:腾讯云IM搭建应用内类微信社交聊天模块

    社交模块是目前主流应用程序最常见的功能之一.有了社交模块,用户在您的应用内,可以自由的交流互动,并添加好友,关注其他用户等等.这可在很大程度上,促进您应用程序的活跃度,吸引用户留存,获取更多新用户,并 ...