本文最后更新于2 分钟前,文中所描述的信息可能已发生改变。
设置上传文件最大大小设置
yml
# application.yml
spring:
servlet:
multipart:
max-file-size: 10MB
文件上传
java
/**
* 接收从客户端上传的文件并保存在服务器的basePath目录中
* @param files 客户端上传的文件
* @throws IOException
* @Return 上传后的路径
*/
public static List<String> upLoad(MultipartFile[] files) throws IOException {
List<String> filesPath = new ArrayList<>();
//遍历上传的文件
for (MultipartFile file : files) {
//获取原文件名
String filename = file.getOriginalFilename();
//通过文件保存路径创建file对象
File dest = new File(basePath + filename);
//保存上传后的文件路径
filesPath.add(dest.getPath());
//判断文件路径是否存在,不存在则创建
if(!dest.getParentFile().exists()){
dest.getParentFile().mkdirs();
}
//将文件转存到目的地,文件不存在则事先创建
file.transferTo(dest);
}
return filesPath;
}
文件下载
java
/**
* 客户端下载服务器的文件
* @param fileName 客户端要下载的文件路径
* @return
*/
public static void downLoad(String fileName, HttpServletResponse response) throws IOException {
File file = new File(basePath + fileName);
if(!file.exists()){
//文件不存在抛出异常
throw new FileNotFoundException("文件未找到");
}
//清空缓存区
response.reset();
//设置响应的内容类型为二进制流
response.setContentType(MimeTypeUtils.APPLICATION_OCTET_STREAM_VALUE);
//设置字符编码
response.setCharacterEncoding(StandardCharsets.UTF_8.displayName());
//设置响应的内容长度,这是为了告诉客户端要下载的文件的大小
response.setContentLengthLong(file.length());
//设置响应头中的 Content-Disposition 属性,告诉浏览器以附件形式下载文件,并指定文件名
response.setHeader(HttpHeaders.CONTENT_DISPOSITION,"attachment;filename="+fileName);
//获取输出流
OutputStream os = response.getOutputStream();
//封装输入流我高性能的BufferedInputStream
InputStream fileInputStream = new BufferedInputStream(new FileInputStream(file));
//每次读取的最大字节数
byte[] bytes = new byte[1024];
//实际读取的字节数
int len;
while ((len = fileInputStream.read(bytes))>0){
//循环读取
os.write(bytes,0,len);
os.flush();
}
//刷新
//response.flushBuffer();
fileInputStream.close();
}