对于springboot文件上传需要了解一个类 MultipartFile
,该类用于文件上传。我此次使用 thymeleaf
模板引擎,该模板引擎文件后缀 .html
。
/** * 单文件上传,使用post请求 * @param file * @return */ @PostMapping("/upload") @ResponseBody public String fileupload(MultipartFile file){ // 获取文件的原文件名 String oldName = file.getOriginalFilename(); // 文件上传,保存为新的文件名 if (!"".equals(oldName) && oldName != null){ // 获取文件后缀 String suffixFileName = oldName.substring(oldName.lastIndexOf(".")); // 设置文件保存的文件夹 SimpleDateFormat sdf = new SimpleDateFormat("/yyyy/MM/dd"); String filePath = "C:/Users/Desktop/springboot" + sdf.format(new Date()) + "/" + UUID.randomUUID() + suffixFileName; File dest = new File(filePath); // 判断文件夹是否存在 if (!dest.exists()){ dest.mkdirs(); } try { // 文件写入 file.transferTo(dest); // 返回文件保存成功之后的文件名路径 return filePath; } catch (Exception e) { e.printStackTrace(); } } return "文件上传失败"; }
upload.html
页面 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div>单文件上传</div> <form method="post" enctype="multipart/form-data" action="/upload"> <input name="file" type="file" /> <input type="submit" value="提交" /> </form> </body> </html>
post
方法 html
页面我暂时放在 static
文件夹下,由于浏览器页面是直接先访问到 html
页面的,而不是通过 controller
跳转得到的,所以该页面属于静态页面,而 static
文件夹下的资源文件属于静态资源文件都是可以直接访问的。这一点要区别于 templates
文件夹。 template might not exist or might not be accessible by any of the configured Template Resolvers
,可能原因是:需要在 controller
方法体上加上注解 @ResponseBody或@RestController
。
多文件上传相比较于单文件上传,区别于单文件上传,多文件上传后端方法使用数组来接收 MultipartFile[] files
,且多文件上传只是循环调用单文件上传的方法。
/** * 多文件上传(只是比单文件上传多了一个循环) * @param files 文件集合 * @return */ @PostMapping("/uploads") @ResponseBody public String fileUploadMultipart(MultipartFile[] files, HttpServletRequest request){ // HttpSession session = request.getSession(); // System.out.println(session); // ServletContext servletContext = session.getServletContext(); // System.out.println(servletContext); // String context = servletContext.getRealPath("context"); // System.out.println(context); List<String> list = new ArrayList<String>(); // 此处循环调用单文件的上传方法 for (int i = 0; i< files.length; i++){ String url = fileupload(files[i]); list.add(url); } return list.toString(); }
upload.html
页面 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div>多文件上传</div> <form method="post" enctype="multipart/form-data" action="/uploads"> <input name="files" type="file" multiple/> <input type="submit" value="上传"/> </form> </body> </html>
本系列代码github地址: https://github.com/shanggushenlong/springboot-demo