Spring Boot文件上传简单实例代码

 更新时间:2019年08月21日 08:23:14   作者:程序鱼  
在本篇文章里小编给大家分享的是关于Spring Boot 文件上传简易教程以及相关知识点,需要的朋友们参考下。

上传文件是我们日常使用最为广泛的功能之一,比如App端上传头像。本章演示如何从客户端上传到 Spring Boot 开发的 Api中。

https://github.com/fishpro/spring-boot-study/tree/master/spring-boot-study-upload

1 新建 Spring Boot Maven 示例工程项目

注意:本示例是用 IDEA 开发工具

  • File > New > Project,如下图选择 Spring Initializr 然后点击 【Next】下一步
  • 填写 GroupId(包名)、Artifact(项目名) 即可。点击 下一步
  • groupId=com.fishpro
  • artifactId=upload
  • 选择依赖 Spring Web Starter 前面打钩。
  • 项目名设置为 spring-boot-study-upload.

文件上传不需要引入第三方组件。

2 依赖引入 Pom.xml

为了演示代码,这里引入 thymeleaf

<dependencies>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
  </dependency>

  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-thymeleaf</artifactId>
  </dependency>
  <dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-test</artifactId>
   <scope>test</scope>
  </dependency>
 </dependencies>

3 编写上传示例
本章代码主要演示单文件上传和多文件上传,前端采用 thymeleaf 模板,实际上就是一个html文件。文件清单包括

  • uploadfile.html 前端文件
  • FileController.java 控制层文件
  • FileUtil.java 文件常用类

3.1 控制层代码

主要使用 MultipartFile 来实现,如下代码 /upload 和 /uploads 分别为单文件上传和多文件上传。其中 @Value("${fishpro.uploadPath}") 是配置文件中设置的。

server.port=8086
fishpro.uploadPath=/Users/jiaojunkang/Desktop/upload/
@Controller
public class FileController {

 @Value("${fishpro.uploadPath}")
 private String uploadPath;

 @GetMapping("/uploadfile")
 public String uploadfile(){
  return "uploadfile";
 }


 /**
  * 单文件
  * */
 @PostMapping("/upload")
 @ResponseBody
 Object upload(@RequestParam("file") MultipartFile file, HttpServletRequest request) {
  Map<String,Object> map=new HashMap();
  map.put("status",0);
  String fileName = file.getOriginalFilename();
  fileName = UUID.randomUUID().toString(); //对文件名称重命名

  try {
   FileUtil.uploadFile(file.getBytes(), uploadPath, fileName);
   map.put("filename",fileName);
  } catch (Exception e) {
   map.put("status",-1);
   map.put("message",e.getMessage());

  }


  return map;
 }

 /**
  * 多文件
  * */
 @PostMapping("/uploads")
 @ResponseBody
 Object uploads(@RequestParam("files") MultipartFile [] files, HttpServletRequest request) {
  Map<String,Object> map=new HashMap();
  map.put("status",0);
  List<String> filenames=new ArrayList<>();
  for (MultipartFile file: files
    ) {
   String ext = file.getOriginalFilename().split("\\.")[1];
   String fileName = file.getOriginalFilename();
   //fileName = UUID.randomUUID().toString()+"."+ext; //对文件名称重命名

   try {
    FileUtil.uploadFile(file.getBytes(), uploadPath, fileName);
    filenames.add(fileName);
   } catch (Exception e) {
    map.put("status",-1);
    map.put("message",e.getMessage());
    return map;

   }
  }

  map.put("filename",filenames);
  return map;
 }
}

3.2 前端文件

前端文件这里演示的比较简单,可以有多中形态,这里使用 form 来提交。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<hr/>
<div>单位文件</div>
<form enctype="multipart/form-data" method="post" action="/upload">
  文件 <input type="file" name="file"/>
  <input type="submit" value="上传"/>
</form>
<hr/>
<div>多文件</div>

<form enctype="multipart/form-data" method="post" action="/uploads">
  <p>文件1<input type="file" name="files"/></p>
  <p>文件2<input type="file" name="files"/></p>
  <p>文件3<input type="file" name="files"/></p>
  <p><input type="submit" value="上传"/></p>
</form>
</body>
</html>

3.3 文件保存类

public class FileUtil {

  public static void uploadFile(byte[] file, String filePath, String fileName) throws Exception {
    File targetFile = new File(filePath);
    if (!targetFile.exists()) {
      targetFile.mkdirs();
    }
    FileOutputStream out = new FileOutputStream(filePath + fileName);
    out.write(file);
    out.flush();
    out.close();
  }

  public static boolean deleteFile(String fileName) {
    File file = new File(fileName);
    // 如果文件路径所对应的文件存在,并且是一个文件,则直接删除
    if (file.exists() && file.isFile()) {
      if (file.delete()) {
        return true;
      } else {
        return false;
      }
    } else {
      return false;
    }
  }

  public static String renameToUUID(String fileName) {
    return UUID.randomUUID() + "." + fileName.substring(fileName.lastIndexOf(".") + 1);
  }
}

以上就是本次介绍的全部知识点内容,感谢大家的阅读和对脚本之家的支持。

相关文章

  • java字节流知识点总结

    java字节流知识点总结

    在本篇文章里小编给大家分享的是关于java字节流的相关知识点内容,有兴趣的朋友们跟着学习参考下。
    2019-07-07
  • spring-boot-maven-plugin报红解决方案(亲测有效)

    spring-boot-maven-plugin报红解决方案(亲测有效)

    本文主要介绍了spring-boot-maven-plugin报红解决方案,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • 你知道怎么用Spring的三级缓存解决循环依赖吗

    你知道怎么用Spring的三级缓存解决循环依赖吗

    这篇文章主要为大家详细介绍了Spring的三级缓存解决循环依赖,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-02-02
  • java swing实现贪吃蛇双人游戏

    java swing实现贪吃蛇双人游戏

    这篇文章主要为大家详细介绍了java swing实现贪吃蛇双人小游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01
  • 使用feign配置网络ip代理

    使用feign配置网络ip代理

    这篇文章主要介绍了使用feign配置网络ip代理,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Idea中git的使用小结

    Idea中git的使用小结

    这篇文章主要介绍了Idea中git的使用小结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • Spring Boot 实现字段唯一校验功能(实例代码)

    Spring Boot 实现字段唯一校验功能(实例代码)

    这篇文章主要介绍了Spring Boot 实现字段唯一校验,实现代码很简单,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • Java使用Sharding-JDBC分库分表进行操作

    Java使用Sharding-JDBC分库分表进行操作

    Sharding-JDBC 是无侵入式的 MySQL 分库分表操作工具,本文主要介绍了Java使用Sharding-JDBC分库分表进行操作,感兴趣的可以了解一下
    2021-08-08
  • springboot配置mybatis和事务管理方式

    springboot配置mybatis和事务管理方式

    这篇文章主要介绍了springboot配置mybatis和事务管理方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-04-04
  • Java+Springboot搭建一个在线网盘文件分享系统

    Java+Springboot搭建一个在线网盘文件分享系统

    本主要介绍了通过springboot+freemark+jpa+MySQL实现的在线网盘文件分享系统,其功能跟百度网盘非常类似,可以实现文件的上传、移动、复制、下载等,需要的可以参考一下
    2021-11-11

最新评论