当前位置:   article > 正文

新手入门------SpringBoot文件上传实现_springboot 文件上传

springboot 文件上传

       本次的内容是实现文件上传,小案例要达到的效果是在浏览器选择好文件,然后上传,最后返回结果(失败或成功),分为单文件和多文件上传。


一.案例准备

       首先还是进行springboot项目的创建,这个就不进行演示了。

       本次需要添加的依赖是spring web 和thymeleaf。如果已经有项目但是没有选择这两个依赖,可以点击pom.xml,在<dependencies>中手动添加如下依赖:

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-web</artifactId>
  4. </dependency>
  5. <dependency>
  6. <groupId>org.springframework.boot</groupId>
  7. <artifactId>spring-boot-starter-thymeleaf</artifactId>
  8. </dependency>

本次项目结构如下:

没有templates文件夹的自行创建文件夹即可

二.案例实现

       2.1单文件上传

       分析:首先我们需要的是一个上传文件的界面,输入访问路径后要展示页面,然后选择好文件,点击上传之后就会跳入新页面并且执行文件上传,最后将处理的结果显示在页面。

html页面名称为“uploadfile.html”,内容如下:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8. <title>文件上传</title>
  9. </head>
  10. <body>
  11. <form method="post"
  12. action="/upload/multipart" enctype="multipart/form-data">
  13. <input type="file" name="photo" value="请选择上传的文件" />
  14. <input type="submit" value="提交" />
  15. </form>
  16. </body>
  17. </html>

这里面要注意的是methodenctype文件上传的方法必须为postenctype也是固定为“multipart/form-data”。action为提交后要访问的url地址,与你自己在controller的定义有关。

       在controller层我们可以定义一个Map来处理信息,如下:

  1. // 处理上传文件结果
  2. private Map<String, Object> dealResultMap(boolean res, String msg)
  3. {
  4. Map<String, Object> result = new HashMap<String, Object>();
  5. result.put("success", res);
  6. result.put("msg", msg);
  7. return result;
  8. }

将文件上传结果传入后返回结果。

接下来就是确定访问的页面,如下图:

现在运行后就可以访问到文件上传页面了:

  

然后就是上传功能的实现,如下图:

       文件的名字就按照当前时间来命名,定义格式为“yyyyMMddHHmmssSSSS”(年月日时分秒)。

       获取文件后缀时调用了substring()来截取,先获取文件的原名称,然后找到最后一个 “  .  ”根据这个来截取文件的后缀。

       文件路径则是自己直接定义,可以自行先创建文件夹,也可以通过if语句来判断是否存在,如果不存在调用makirs()来创建文件夹(如上图)。

       文件的上传调用了FileCopyUtils.copy(),该方法的作用是将给定输入文件的内容复制到给定输出文件。因此我们需要传入的是上传的文件和要上传到的地方,如上图。最后结果返回我们之前定义的方法。

运行结果如下:

可以看到已经上传成功了。

       2.2多文件上传

       多文件上传与单文件上传没有太多变化,只是由单个文件变成了多个,因此我们传入的是一个集合,通过遍历来达到所有都上传的目的。

html页面代码如下:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  8. <title>文件上传</title>
  9. </head>
  10. <body>
  11. <form method="post"
  12. action="/upload/multipart" enctype="multipart/form-data">
  13. <input type="file" name="photos" value="请选择上传的文件" /><p>
  14. <input type="file" name="photos" value="请选择上传的文件" /><p>
  15. <input type="file" name="photos" value="请选择上传的文件" /><p>
  16. <input type="submit" value="提交" />
  17. </form>
  18. </body>
  19. </html>

运行结果如下:

三.controller层代码

       多文件上传代码如下,单文件自行更改即可。 

  1. import org.springframework.stereotype.Controller;
  2. import org.springframework.util.FileCopyUtils;
  3. import org.springframework.web.bind.annotation.GetMapping;
  4. import org.springframework.web.bind.annotation.PostMapping;
  5. import org.springframework.web.bind.annotation.RequestParam;
  6. import org.springframework.web.bind.annotation.ResponseBody;
  7. import org.springframework.web.multipart.MultipartFile;
  8. import java.io.File;
  9. import java.io.FileOutputStream;
  10. import java.io.IOException;
  11. import java.text.SimpleDateFormat;
  12. import java.util.Date;
  13. import java.util.HashMap;
  14. import java.util.Map;
  15. @Controller
  16. public class FileController {
  17. @GetMapping("/upload/page")
  18. public String uploadPage() {
  19. return "uploadfile";
  20. }
  21. @PostMapping("/upload/multipart")
  22. @ResponseBody
  23. public Map<String, Object> upload(@RequestParam("photos") MultipartFile[] photos){
  24. String path = "d:/uploaded/";//保存路径
  25. for(MultipartFile photo:photos){
  26. if(!photo.isEmpty()){
  27. String filename = new SimpleDateFormat("yyyyMMddHHmmssSSS").format(new Date());
  28. String suffix = photo.getOriginalFilename().substring(photo.getOriginalFilename().lastIndexOf("."));
  29. if (!suffix.equals(".jpg")) {
  30. return dealResultMap(false, "上传失败");
  31. }
  32. try {
  33. File file = new File(path);
  34. if(!file.exists()){
  35. file.mkdirs();
  36. }
  37. FileCopyUtils.copy(photo.getInputStream(), new FileOutputStream(path + filename + suffix));
  38. } catch (IOException e) {
  39. e.printStackTrace();
  40. return dealResultMap(false, "上传失败");
  41. }
  42. }
  43. }
  44. return dealResultMap(true, "上传成功");
  45. }
  46. // 处理上传文件结果
  47. private Map<String, Object> dealResultMap(boolean res, String msg)
  48. {
  49. Map<String, Object> result = new HashMap<String, Object>();
  50. result.put("success", res);
  51. result.put("msg", msg);
  52. return result;
  53. }
  54. }

       

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/745708
推荐阅读
相关标签
  

闽ICP备14008679号