SpringBoot实现文件上传下载功能小结
作者:喝酒不骑马 时间:2022-11-09 07:40:07
最近做的一个项目涉及到文件上传与下载。前端上传采用百度webUploader插件。有关该插件的使用方法还在研究中,日后整理再记录。本文主要介绍SpringBoot后台对文件上传与下载的处理。
单文件上传
// 单文件上传
@RequestMapping(value = "/upload")
@ResponseBody
public String upload(@RequestParam("file") MultipartFile file) {
try {
if (file.isEmpty()) {
return "文件为空";
}
// 获取文件名
String fileName = file.getOriginalFilename();
logger.info("上传的文件名为:" + fileName);
// 获取文件的后缀名
String suffixName = fileName.substring(fileName.lastIndexOf("."));
logger.info("文件的后缀名为:" + suffixName);
// 设置文件存储路径
String filePath = "D://aim//";
String path = filePath + fileName + suffixName;
File dest = new File(path);
// 检测是否存在目录
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();// 新建文件夹
}
file.transferTo(dest);// 文件写入
return "上传成功";
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return "上传失败";
}
如果想要修改文件路径及文件名,修改filePath以及fileName即可。
多文件上传
//多文件上传
@RequestMapping(value = "/uploadMore", method = RequestMethod.POST)
@ResponseBody
public String handleFileUpload(HttpServletRequest request) {
List<MultipartFile> files = ((MultipartHttpServletRequest) request).getFiles("file");
MultipartFile file = null;
BufferedOutputStream stream = null;
for (int i = 0; i < files.size(); ++i) {
file = files.get(i);
String filePath = "D://aim//";
if (!file.isEmpty()) {
try {
byte[] bytes = file.getBytes();
stream = new BufferedOutputStream(new FileOutputStream(
new File(filePath + file.getOriginalFilename())));//设置文件路径及名字
stream.write(bytes);// 写入
stream.close();
} catch (Exception e) {
stream = null;
return "第 " + i + " 个文件上传失败 ==> "
+ e.getMessage();
}
} else {
return "第 " + i
+ " 个文件上传失败因为文件为空";
}
}
return "上传成功";
}
文件下载
//文件下载相关代码
@RequestMapping("/download")
public String downloadFile(HttpServletRequest request, HttpServletResponse response) {
String fileName = "aim_test.txt";// 设置文件名,根据业务需要替换成要下载的文件名
if (fileName != null) {
//设置文件路径
String realPath = "D://aim//"
File file = new File(realPath , fileName);
if (file.exists()) {
response.setContentType("application/force-download");// 设置强制下载不打开
response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);// 设置文件名
byte[] buffer = new byte[1024];
FileInputStream fis = null;
BufferedInputStream bis = null;
try {
fis = new FileInputStream(file);
bis = new BufferedInputStream(fis);
OutputStream os = response.getOutputStream();
int i = bis.read(buffer);
while (i != -1) {
os.write(buffer, 0, i);
i = bis.read(buffer);
}
System.out.println("success");
} catch (Exception e) {
e.printStackTrace();
} finally {
if (bis != null) {
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (fis != null) {
try {
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
return null;
}
MultipartConfig配置
可以通过MultipartConfig配置类对文件上传进行全局控制。
@Configuration
public class MultipartConfig {
@Bean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
// 置文件大小限制 ,超出此大小页面会抛出异常信息
factory.setMaxFileSize("2MB"); //KB,MB
// 设置总上传数据总大小
factory.setMaxRequestSize("20MB");
// 设置文件临时文件夹路径
// factory.setLocation("E://test//");
// 如果文件大于这个值,将以文件的形式存储,如果小于这个值文件将存储在内存中,默认为0
// factory.setMaxRequestSize(0);
return factory.createMultipartConfig();
}
}
注意事项
前后端文件传输格式应为 multipart/form-data
总结
以上所述是小编给大家介绍的SpringBoot实现文件上传下载功能小结网站的支持!
来源:http://blog.csdn.net/colton_null/article/details/76696674
标签:spring,boot,文件上传,文件下载
0
投稿
猜你喜欢
Spring AOP实现复杂的日志记录操作(自定义注解)
2023-01-24 15:21:50
深入浅出讲解Java集合之Map接口
2023-10-14 20:52:46
springboot项目中jackson-序列化-处理 NULL教程
2022-11-03 14:36:21
使用spring通过aop获取方法参数和参数值
2022-06-04 16:28:33
C#实现HTTP上传文件的方法
2023-04-28 04:05:30
C#实现汉字转换为拼音缩写的代码
2021-11-21 04:04:51
简单谈谈Java中的栈和堆
2022-07-30 05:33:01
C#关于System.Collections空间详解
2022-04-12 16:04:06
Spring的@Value如何从Nacos配置中心获取值并自动刷新
2022-03-11 02:17:03
Java利用Dijkstra算法求解拓扑关系最短路径
2021-08-24 10:30:54
实例解析JAVA中代码的加载顺序
2021-10-26 14:57:22
SpringBoot线程池和Java线程池的使用和实现原理解析
2022-06-27 07:22:30
实例讲解Java并发编程之闭锁
2023-10-25 14:25:07
java.lang.Runtime.exec() Payload知识点详解
2023-11-30 09:56:10
java中this的n种使用方法
2023-12-23 13:13:23
Java中高效判断数组中是否包含某个元素的几种方法
2022-02-21 05:46:39
C#使用yield关键字构建迭代器详解
2023-02-09 12:48:49
C#通用邮件发送类分享
2022-05-03 01:35:36
Android 蓝牙连接 ESC/POS 热敏打印机打印实例(ESC/POS指令篇)
2022-05-06 18:39:37
Ubuntu中使用VS Code与安装C/C++插件的教程详解
2023-07-26 08:21:00