SpringBoot处理项目中一些常见的多文件上传和单文件上传
1.控制层代码写法
代码如下(示例):
@RequestMapping(value = "/fileUpload", method = {RequestMethod.POST})
public RespResultVo fileUpload(@RequestParam("uploadFile") MultipartFile[] file, @RequestParam("str") String[] str, @RequestParam("number") Integer number, HttpServletRequest request) throws IOException {
System.out.println("--------------------------------文件上传执行了--------------------------");
for (String s : str) {
System.out.println("------------------------------------------str="+s);
}
if (file.length > 0) {
for (MultipartFile multipartFile : file) {
try {
if (multipartFile.isEmpty()) {
return RespResultVo.error("文件为空");
}
String fileName = multipartFile.getOriginalFilename();
String suffixName = fileName.substring(fileName.lastIndexOf('.'));
String newFileName = UUID.randomUUID().toString() + suffixName;
System.out.println("-------------------------------newFileName:" + newFileName);
//判断文件上传路径是否存在
String fileUploadTarget = request.getSession().getServletContext().getRealPath("/upload/images/");
System.out.println("----------------------------fileUploadTarget:" + fileUploadTarget);
File dest = new File(fileUploadTarget, newFileName);
if (!dest.getParentFile().exists()) {
dest.getParentFile().mkdirs(); //如果文件目录不存在则新建目录
}
multipartFile.transferTo(dest);
String path = request.getScheme()+"://" + request.getServerName()+"/jsaas"+"/upload/images/"+newFileName;
System.out.println("-----------------------------------------------path:" + path);
/* PtYgExample example=new PtYgExample();
example.createCriteria().andZgbhEqualTo(zgbh);
PtYg ptYg=new PtYg();
ptYg.setYgzpurl(newFileName);
ptYgMapper.updateByExampleSelective(ptYg,example);
//System.out.println(dest.getPath());*/
} catch (IOException e) {
e.printStackTrace();
}
}
}
return RespResultVo.ok("文件上传成功");
}
2.多文件上传页面写法
代码如下(示例):
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
<title>多文件上传</title>
</head>
<body>
<form method="post" action="/fileUpload" enctype="multipart/form-data">
<input type="file" name="uploadFile"><br>
<input type="file" name="uploadFile"><br>
<input type="file" name="uploadFile"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
总结
这种方式只适用于前后端在一个服务器下,可以预览到图片,如果是前后端分离的项目,则需要单独在配置文件application.yml文件中定义上传文件的目标存储地址,然后在此控制层获取到并上传文件到指定目录下,前端通过相对路径读取的方式预览图片。