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

网友投稿 257 2022-12-30


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

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

https://github.com/fishpro/spring-boot-study/tree/master/spring-boot-studhttp://y-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

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-thymeleaf

org.springframework.boot

spring-boot-starter-test

test

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 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 map=new HashMap();

map.put("status",0);

List 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 来提交。

文件

文件1

文件2

文件3

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);

}

}

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:微服务网关怎么做协议转换(微服务网关配置)
下一篇:Java Calendar日历与Date日期的相互转换详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~