优化下列代码:public String singleFileUpload(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes){ if(file.isEmpty()){ redirectAttributes.addFlashAttribute("message","select file"); return "redirect:uploadStatus"; } try{ byte[] bytes = file.getBytes(); Path dir = Paths.get(UPLOADED_FOLDER); Path path = Paths.get(UPLOADED_FOLDER + file.getOriginalFilename()); if(!Files.exists(dir)){ Files.createDirectories(dir); } Files.write(path,bytes); redirectAttributes.addFlashAttribute("message", "success ' " + file.getOriginalFilename() + ","); } catch (IOException e) { redirectAttributes.addFlashAttribute("message", "Server throw IOException"); e.printStackTrace(); } return "redirect:/uploadStatus"; }
时间: 2023-12-06 15:45:29 浏览: 306
可以对该方法进行如下优化:
1. 对于上传文件为空的情况,可以直接在方法上添加注解@ModelAttribute来进行判断,避免在方法体内部进行判断。
2. 在文件上传前需要先进行文件类型、大小等的校验,以确保上传的文件符合要求。
3. 可以使用try-with-resources语句来自动关闭文件流,避免资源泄露。
改进后的代码如下所示:
```java
@PostMapping("/upload")
public String singleFileUpload(@RequestParam("file") MultipartFile file, RedirectAttributes redirectAttributes) {
if (file == null || file.isEmpty()) {
redirectAttributes.addFlashAttribute("message", "请选择上传文件!");
return "redirect:/uploadStatus";
}
if (!checkFileType(file) || !checkFileSize(file)) {
redirectAttributes.addFlashAttribute("message", "上传文件不符合要求!");
return "redirect:/uploadStatus";
}
try (OutputStream out = new BufferedOutputStream(
new FileOutputStream(new File(UPLOADED_FOLDER + file.getOriginalFilename())))) {
out.write(file.getBytes());
redirectAttributes.addFlashAttribute("message", "文件上传成功!文件名:" + file.getOriginalFilename());
return "redirect:/uploadStatus";
} catch (IOException e) {
redirectAttributes.addFlashAttribute("message", "文件上传失败!");
e.printStackTrace();
return "redirect:/uploadStatus";
}
}
private boolean checkFileType(MultipartFile file) {
// 校验文件类型
return true;
}
private boolean checkFileSize(MultipartFile file) {
// 校验文件大小
return true;
}
```
阅读全文