Springboot 和hutool文件上传下载
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文件上传下载的更多相关文章
- Springboot(九).多文件上传下载文件(并将url存入数据库表中)
一. 文件上传 这里我们使用request.getSession().getServletContext().getRealPath("/static")的方式来设置文件的存储 ...
- Spring Boot2(十四):单文件上传/下载,文件批量上传
文件上传和下载在项目中经常用到,这里主要学习SpringBoot完成单个文件上传/下载,批量文件上传的场景应用.结合mysql数据库.jpa数据层操作.thymeleaf页面模板. 一.准备 添加ma ...
- springboot整合vue实现上传下载文件
https://blog.csdn.net/yhhyhhyhhyhh/article/details/89888953 文章目录 springboot整合vue实现上传下载文件 1上传下载文件api文 ...
- SpringBoot入门一:基础知识(环境搭建、注解说明、创建对象方法、注入方式、集成jsp/Thymeleaf、logback日志、全局热部署、文件上传/下载、拦截器、自动配置原理等)
SpringBoot设计目的是用来简化Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过这种方式,SpringBoot致力于在蓬勃发 ...
- SpringBoot项目实现文件上传和邮件发送
前言 本篇文章主要介绍的是SpringBoot项目实现文件上传和邮件发送的功能. SpringBoot 文件上传 说明:如果想直接获取工程那么可以直接跳到底部,通过链接下载工程代码. 开发准备 环境要 ...
- SpringMVC文件上传下载(单文件、多文件)
前言 大家好,我是bigsai,今天我们学习Springmvc的文件上传下载. 文件上传和下载是互联网web应用非常重要的组成部分,它是信息交互传输的重要渠道之一.你可能经常在网页上传下载文件,你可能 ...
- 一、手把手教你docker搭建fastDFS文件上传下载服务器
在搭建fastDFS文件上传下载服务器之前,你需要准备的有一个可连接的linux服务器,并且该linux服务器上已经安装了docker,若还有没安装docker的,先百度自行安装docker. 1.执 ...
- Struts的文件上传下载
Struts的文件上传下载 1.文件上传 Struts2的文件上传也是使用fileUpload的组件,这个组默认是集合在框架里面的.且是使用拦截器:<interceptor name=" ...
- Android okHttp网络请求之文件上传下载
前言: 前面介绍了基于okHttp的get.post基本使用(http://www.cnblogs.com/whoislcj/p/5526431.html),今天来实现一下基于okHttp的文件上传. ...
- Selenium2学习-039-WebUI自动化实战实例-文件上传下载
通常在 WebUI 自动化测试过程中必然会涉及到文件上传的自动化测试需求,而开发在进行相应的技术实现是不同的,粗略可划分为两类:input标签类(类型为file)和非input标签类(例如:div.a ...
随机推荐
- H3C MS4300V2配置mac地址与接口绑定
配置mac地址与接口绑定 例: <h3c>system-view //进入系统视图 [h3c]int g 1/0/45 //进入45接口 [h3c-GigabitEthernet1 ...
- 郁金香 中级班 1.c++的类和对象
#include<stdio.h> class 生物 { public: 生物() { printf("我是构造函数\n"); } int id1; int id2; ...
- [ARC107D] Number of Multisets
\(\text{Solution}\) 学习到了一些 \(dp\) 的 \(trick\) 设 \(f_{i,j}\) 表示用了 \(i\) 的元素,当前和为 \(j\) 的方案数 \(dp\) 有两 ...
- 一文详解ATK Loss论文复现与代码实战
摘要:该方法的主要思想是使用数值较大的排在前面的梯度进行反向传播,可以认为是一种在线难例挖掘方法,该方法使模型讲注意力放在较难学习的样本上,以此让模型产生更好的效果. 本文分享自华为云社区<AT ...
- CF837F - Prefix Sums
首先,我们发现这道题目"序列会增长"的情况完全就是唬人的,因为我们把 \(x_i\) 输入之后,\(y_i\) 永远是 \(0\),而前导 \(0\) 在计算的过程中没有任何的作用 ...
- Postgresql清理WAL日志
WAL是Write Ahead Log的简写,和oracle的redo日志类似,存放在$PGDATA/pg_xlog中,10版本以后在$PGDATA/pg_wal目录. 1.如果开启了归档,在目录ar ...
- 火山引擎 DataLeap:揭秘字节跳动数据血缘架构演进之路
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 DataLeap 是火山引擎数智平台 VeDI 旗下的大数据研发治理套件产品,帮助用户快速完成数据集成.开发.运维 ...
- LeetCode-1219 黄金矿工
来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/path-with-maximum-gold 题目描述 你要开发一座金矿,地质勘测学家已经探明了这 ...
- 【C++复习】运算符优先级(简)
只讨论个大概,不管细节不同优先级的运算符混在一起,就根据优先级算相同优先级的运算符混在一起,就看它们的结合性(这里不谈) 一定要记住:括号>基本计算>关系>逻辑>底层选手 1. ...
- python去重的几种方法
from collections import OrderedDict list1 = [1,5,2,1,10] print(list(set(list1))) #[1, 2, 10, 5] 这种方式 ...