spring boot 引入”约定大于配置“的概念,实现自动配置,节约了开发人员的开发成本,并且凭借其微服务架构的方式和较少的配置,一出来就占据大片开发人员的芳心。大部分的配置从开发人员可见变成了相对透明了,要想进一步熟悉还需要关注源码。
1.文件上传(前端页面):

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="/testUpload" method="POST" enctype="multipart/form-data">
<input type="file" name="file"/>
<input type="submit" />
</form>
<a href="/testDownload">下载</a>
</body>
</html>

表单提交加上enctype="multipart/form-data"很重要,文件以二进制流的形式传输。

2.文件上传(后端java代码)支持多文件

Way1.使用MultipartHttpServletRequest来处理上传请求,然后将接收到的文件以流的形式写入到服务器文件中:

@RequestMapping(value="/testUpload",method=RequestMethod.POST)
public void testUploadFile(HttpServletRequest req,MultipartHttpServletRequest multiReq) throws IOException{
FileOutputStream fos=new FileOutputStream(new File("F://test//src//file//upload.jpg"));
FileInputStream fs=(FileInputStream) multiReq.getFile("file").getInputStream();
byte[] buffer=new byte[1024];
int len=0;
while((len=fs.read(buffer))!=-1){
fos.write(buffer, 0, len);
}
fos.close();
fs.close();
}

Way2.也可以这样来取得上传的file流:

// 文件上传
@RequestMapping("/fileUpload")
public Map fileUpload(@RequestParam("file") MultipartFile file, HttpServletRequest req) {
Map result = new HashMap();
SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");// 设置日期格式
String dateDir = df.format(new Date());// new Date()为获取当前系统时间
String serviceName = UuidUtil.get32UUID()
+ file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
File tempFile = new File(fileDir + dateDir + File.separator + serviceName);
if (!tempFile.getParentFile().exists()) {
tempFile.getParentFile().mkdirs();
}
if (!file.isEmpty()) {
try {
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(tempFile));
// "d:/"+file.getOriginalFilename() 指定目录
out.write(file.getBytes());
out.flush();
out.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
result.put("msg", "上传失败," + e.getMessage());
result.put("state", false);
return result;
} catch (IOException e) {
e.printStackTrace();
result.put("msg", "上传失败," + e.getMessage());
result.put("state", false);
return result;
}
result.put("msg", "上传成功");
String fileId = Get8uuid.generateShortUuid();
String fileName = file.getOriginalFilename();
String fileType = fileName.substring(fileName.lastIndexOf(".") + 1);
String fileUrl = webDir + dateDir + '/' + serviceName;
uploadMapper.saveFileInfo(fileId, serviceName, fileType, fileUrl);
result.put("state", true);
return result;
} else {
result.put("msg", "上传失败,因为文件是空的");
result.put("state", false);
return result;
}

3.application.properties配置文件

#上传文件大小设置
multipart.maxFileSize=500Mb
multipart.maxRequestSize=500Mb

4.文件下载将文件写到输出流里:

@RequestMapping(value="/testDownload",method=RequestMethod.GET)
public void testDownload(HttpServletResponse res) throws IOException{
File file = new File("C:/test.txt");

  resp.setHeader("content-type", "application/octet-stream");
  resp.setContentType("application/octet-stream");
  resp.setHeader("Content-Disposition", "attachment;filename=" + fileName);
  byte[] buff = new byte[1024];
  BufferedInputStream bis = null;
  OutputStream os = null;
  try {
  os = resp.getOutputStream();
  bis = new BufferedInputStream(new FileInputStream(file));
  int i = bis.read(buff);
  while (i != -1) {
  os.write(buff, 0, buff.length);
  os.flush();
  i = bis.read(buff);
  }
  } catch (IOException e) {
  e.printStackTrace();
  } finally {
  if (bis != null) {
  try {
  bis.close();
  } catch (IOException e) {
  e.printStackTrace();
  }
  }
  }

}

5.获取文件大小

// 文件大小转换
DecimalFormat df1 = new DecimalFormat("0.00");
String fileSizeString = "";
long fileSize = file.getSize();
if (fileSize < 1024) {
fileSizeString = df1.format((double) fileSize) + "B";
} else if (fileSize < 1048576) {
fileSizeString = df1.format((double) fileSize / 1024) + "K";
} else if (fileSize < 1073741824) {
fileSizeString = df1.format((double) fileSize / 1048576) + "M";
} else {
fileSizeString = df1.format((double) fileSize / 1073741824) + "G";
}

如果是File类则fileSize=file.length()。

spring boot实现文件上传下载的更多相关文章

  1. Spring Boot 教程 - 文件上传下载

    在日常的开发工作中,基本上每个项目都会有各种文件的上传和下载,大多数文件都是excel文件,操作excel的JavaAPI我用的是apache的POI进行操作的,POI我之后会专门讲到.此次我们不讲如 ...

  2. Spring Boot入门——文件上传与下载

    1.在pom.xml文件中添加依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="ht ...

  3. spring boot:单文件上传/多文件上传/表单中多个文件域上传(spring boot 2.3.2)

    一,表单中有多个文件域时如何实现说明和文件的对应? 1,说明和文件对应 文件上传页面中,如果有多个文件域又有多个相对应的文件说明时, 文件和说明如何对应? 我们在表单中给对应的file变量和text变 ...

  4. spring mvc注解文件上传下载

    需要两个包: 包如何导入就不介绍了,前端代码如下(一定要加enctype="multipart/form-data"让服务器知道是文件上传): <form action=&q ...

  5. Spring Boot—04文件上传

    package com.smartmap.sample.ch1.controller.view; import java.io.File; import java.io.IOException; im ...

  6. spring mvc 实现文件上传下载

    /** * 文件上传 * @param pictureFile */ @RequestMapping("/reportupload") public ResponseInfo up ...

  7. spring boot Tomcat文件上传找不到零时文件夹

    springboot项目上传文件是找不到零时文件夹 1.本身启动jar包时内置Tomcat没有创建零时文件夹 2.在zuul网关级别没有创建零时文件夹 处理方案: -Djava.io.tmpdir=/ ...

  8. Spring Boot RestTemplate文件上传

    @ResponseBody @RequestMapping(value = "/upload.do", method = RequestMethod.POST) public St ...

  9. Spring boot设置文件上传大小限制

    原文:https://blog.csdn.net/lizhangyong1989/article/details/78586421 Spring boot1.0版本的application.prope ...

随机推荐

  1. JavaScript中离线应用和客户端存储(cookies、sessionStorage、localStorage)

    一.离线应用 所谓离线web应用,就是在设备不能上网的情况下仍然可以运行的应用. 开发离线web应用需要几个步骤:首先,确保应用知道设备是否能上网,以便下一步执行正确的操作:然后,应用还必须能访问一定 ...

  2. coraldraw快捷键

        显示导航窗口(Navigator window) [N] 运行 Visual Basic 应用程序的编辑器 [Alt]+[F11]  保存当前的图形 [Ctrl]+[S]  打开编辑文本对话框 ...

  3. 可以从CSS框架中借鉴到什么

    http://isux.tencent.com/css-framework.html http://isux.tencent.com/css-framework.html 现在很多人会使用 CSS 框 ...

  4. SQL中varchar和nvarchar的基本介绍及其区别

    SQL中varchar和nvarchar的基本介绍及其区别 varchar(n) 长度为 n 个字节的可变长度且非 Unicode 的字符数据.n 必须是一个介于 1 和 8,000 之间的数值.存储 ...

  5. VMware搭建Oracle 11g RAC测试环境 For Linux

    环境如下: Linux操作系统:Centos 6.5 64bit (这个版本的redhat 6内核等OS在安装grid最后执行root.sh时会出现crs-4124,是oracle11.2.0.1的b ...

  6. 【带权并查集】HDU 3047 Zjnu Stadium

    http://acm.hdu.edu.cn/showproblem.php?pid=3047 [题意] http://blog.csdn.net/hj1107402232/article/detail ...

  7. 制作U盘Puppy-Live启动盘

    制作U盘Puppy-Live启动盘 准备工具和材料:Puppy的ISO镜像文件.UltraISO工具.100M以上的U盘 开始: 1.用Ultraiso打开下载的镜像文件,然后选择菜单栏里面的&quo ...

  8. 栈 练习 Codevs 3137 3138 3139

    3137 栈练习1 时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 给定一个栈(初始为空,元素类型为整数,且小于等于100),只 ...

  9. [Noip复习知识点][个人向]Zackzh

    只是列列一些要复习的,努力复习吧,有种noip退役的赶脚. 一.模拟 (这你也不会?退役吧) 二.DP 1.基础dp 2.区间dp 3.状压dp 4.树形dp 6.概率(期望)dp 7.环形dp 8. ...

  10. Google C++ style guide——C++类

    1.构造函数的职责 构造函数中仅仅进行那些没有实际意义的初始化.由于成员变量的"有意义"的值大多不在构造函数中确定. 能够的话,使用Init()方法集中初始化为有意义的数据. 长处 ...