1、先判断文件是否为空(为空的话返回一个错误提示)
if (file.isEmpty()) {
return ResultInfo.error(500, "文件为空");
}
2、获取文件名
String fileName = file.getOriginalFilename();
logger.info("上传的文件名为:" + fileName);
3、获取文件的后缀名
String suffixName = fileName.substring(fileName.lastIndexOf("."));
logger.info("上传的后缀名为:" + suffixName);
4、限制上传文件类型
if (suffixName.equals(".jpg") || suffixName.equals(".png") || suffixName.equals(".doc") || suffixName.equals(".docx") || suffixName.equals(".ppt"))
logger.info("上传的后缀名为:" + suffixName);
5、设置文件上传后的路径
String filePath = "D:\\nginx-1.17.5\\html\\";
6、检测是否存在该目录
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs();
}
7、创建文件记录对象,添加文件信息
try {
file.transferTo(dest);
String pathNmae = HTTPURL + uuidFileName;
/**
* 创建文件记录对象 添加文件信息
*/
SystemFile recode = new SystemFile();
recode.setFileName(uuidFileName);
recode.setUpdateTime(new Date());
recode.setUfIp(UrlEscapers.urlFragmentEscaper().escape(pathNmae));
recode.setSiteId(siteId);
recode.setUserId(userId);
recode.setAddType(type);
fileService.insertSelective(recode);
return ResultInfo.success(UrlEscapers.urlFragmentEscaper().escape(pathNmae));
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return ResultInfo.error(500, "上传失败");
}
多文件上传:
@PostMapping("/marketingUploads")
@ApiOperation(value = "文件上传", notes = "多文件上传", httpMethod = "POST")
@ResponseBody
public ResultInfo marketingUploads(HttpServletRequest request,
@RequestParam("files") MultipartFile[] files,
@RequestParam(value = "siteId", required = true) Integer siteId,
@RequestParam(value = "userId", required = true) Integer userId,
@RequestParam(value = "type", required = false) Integer type) {
try {
logger.info("====文件上传开始====");
List<String> pathNmae = new ArrayList<>();
// 如果文件不为空,写入上传路径,进行文件上传
if (null != files && files.length > 0) {
for (MultipartFile file : files) {
// 测试MultipartFile接口的各个方法
logger.info("文件类型ContentType=" + file.getContentType());
logger.info("文件组件名称Name=" + file.getName());
logger.info("文件原名称OriginalFileName=" + file.getOriginalFilename());
logger.info("文件大小Size=" + file.getSize() + "byte or " + file.getSize() / 1024 + "KB");
// 获取上传的文件名称,并结合存放路径,构建新的文件名称
String fileName = file.getOriginalFilename();
// 文件上传后的路径
String filePath = "D:\\nginx-1.17.5\\html\\marketing\\";
//得到一个唯一数
UUID uuid = UUID.randomUUID();
// 获取文件的后缀名
String suffixName = fileName.substring(fileName.lastIndexOf("."));
// 拼接避免文件重复
String uuidFileName = uuid + "/" + fileName;
//获取要上传的路径文件名
File dest = new File(filePath + uuidFileName);
//判断要上传的路径是否存在
if (!dest.getParentFile().exists()) {
//不存在创建一个路径
dest.getParentFile().mkdirs();
}
//将上传文件保存到目标文件目录
file.transferTo(dest);
String pathNmaeand = HTTPURL + "marketing/" + uuidFileName;
pathNmae.add(UrlEscapers.urlFragmentEscaper().escape(pathNmaeand));
/**
* 创建文件记录对象 添加文件信息
*/
SystemFile recode = new SystemFile();
recode.setFileName(fileName);
recode.setContent(suffixName);
recode.setUpdateTime(new Date());
recode.setUfIp(UrlEscapers.urlFragmentEscaper().escape(pathNmaeand));
recode.setSiteId(siteId);
recode.setUserId(userId);
recode.setAddType(type);
fileService.insertSelective(recode);
}
return ResultInfo.success(pathNmae);
} else {
return ResultInfo.error(201, "上传文件失败!");
}
} catch (IOException e) {
logger.info("上传出现异常信息:" + e.getMessage());
return ResultInfo.error(201, "上传出现异常:" + e.getMessage());
}
}
文件下载:
public HttpServletResponse downloadNet(HttpServletResponse response,@RequestParam("pathUrl") String pathUrl, @RequestParam("pathName") String pathName) throws MalformedURLException {
try {
String filePath = "D:\\nginx-1.17.5\\html\\";
// path是指欲下载的文件的路径。
File file = new File(filePath + pathUrl);
// 取得文件名。
String filename = pathName;
// 取得文件的后缀名。
String ext = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase();
// 以流的形式下载文件。
InputStream fis = new BufferedInputStream(new FileInputStream(filePath + pathUrl));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
// 清空response
response.reset();
// 设置response的Header
response.addHeader("Content-Disposition", "attachment;filename=" + new String(filename.getBytes()));
response.addHeader("Content-Length", "" + file.length());
OutputStream toClient = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/octet-stream");
toClient.write(buffer);
toClient.flush();
toClient.close();
} catch (IOException ex) {
ex.printStackTrace();
}
return response;
}