1、接口类
package com.controller;
import com.cloudwis.campus.until.FileUtils;
import io.swagger.annotations.Api;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
/**
* <p>
* 上传下载图片信息
* </p>
*
* @author hch
* @since 2021-12-08
*/
@RestController @Api(value = "上传下载图片信息",tags = {"上传下载图片信息-接口"}) @RequestMapping("/app") @Slf4j public class SgUploadFileController { @PostMapping(value = "/upload") public String upload(@RequestParam("file") MultipartFile file) { try { if (file.isEmpty()) { return "文件为空"; } String filePath = "/app/file/"; File dirs = FileUtil.mkdir(filePath); if (!dirs.exists()) { return "创建目录失败"; } // 获取大小 long size = file.getSize(); log.info("文件大小: " + size); // 判断上传文件大小 if (!FileUtils.checkFileSize(file,20,"M")) { log.error("上传文件规定小于20MB"); return "上传文件规定小于20MB"; } // 获取文件名 String fileName = file.getOriginalFilename(); log.info("上传的文件名为:" + fileName); // 获取文件的后缀名 String suffixName = fileName.substring(fileName.lastIndexOf(".")); log.info("文件的后缀名为:" + suffixName); // 设置文件存储路径 String originalFilename = file.getOriginalFilename(); String suffix = FileUtil.getSuffix(originalFilename); String newFileName = IdUtil.simpleUUID() + "." + suffix; String path = filePath + newFileName; InputStream in = null; OutputStream out = null; try { in = file.getInputStream(); File newFile = new File(path); out = new FileOutputStream(newFile); byte[] bff = new byte[2048]; for (int len; (len = in.read(bff)) != -1; ) { out.write(bff, 0, len); out.flush(); } } catch (IOException e) { e.printStackTrace(); return "文件读取失败"; } finally { if (ObjectUtil.isNotNull(in)) { try { in.close(); } catch (IOException e) { e.printStackTrace(); } } if (ObjectUtil.isNotNull(out)) { try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } return "上传成功:"+path; } catch (IllegalStateException e) { e.printStackTrace(); } return "上传失败"; }
}
2、FileUtils工具类
package com.until;
import org.springframework.core.io.ClassPathResource;
import org.springframework.util.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
/**
* @Author: liyh
* @Date: 2020/11/4 16:10
*/
public class FileUtils {
/**
* 下载文件
* @param request
* @param response
* @param fileName
* @return
* @throws IOException
*/
public static String downloadFiles(HttpServletRequest request, HttpServletResponse response, String fileName){
if (StringUtils.isEmpty(fileName)) {
return "文件名称为空";
}
//设置文件路径
ClassPathResource classPathResource = new ClassPathResource("templates/" + fileName);
File file = null;
try {
file = classPathResource.getFile();
} catch (IOException e) {
e.printStackTrace();
return "文件不存在";
}
response.setHeader("content-type", "application/octet-stream");
// 设置强制下载不打开
response.setContentType("application/force-download");
// 设置文件名
response.addHeader("Content-Disposition", "attachment;fileName=" + fileName);
byte[] buffer = new byte[1024];
InputStream 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);
}
} 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 "文件下载成功";
}
/**
* 判断文件大小
*
* @param file 文件
* @param size 限制大小
* @param unit 限制单位(B,K,M,G)
* @return
*/
public static boolean checkFileSize(MultipartFile file, int size, String unit) {
if (file.isEmpty() || StringUtils.isEmpty(size) || StringUtils.isEmpty(unit)) {
return false;
}
long len = file.getSize();
double fileSize = 0;
if ("B".equals(unit.toUpperCase())) {
fileSize = (double) len;
} else if ("K".equals(unit.toUpperCase())) {
fileSize = (double) len / 1024;
} else if ("M".equals(unit.toUpperCase())) {
fileSize = (double) len / 1048576;
} else if ("G".equals(unit.toUpperCase())) {
fileSize = (double) len / 1073741824;
}
if (fileSize > size) {
return false;
}
return true;
}
}