SpringBoot如何实现文件上传功能
发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,这篇文章主要介绍了SpringBoot如何实现文件上传功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。经典的文件上传服务器处理上传文
千家信息网最后更新 2025年01月16日SpringBoot如何实现文件上传功能
这篇文章主要介绍了SpringBoot如何实现文件上传功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。
经典的文件上传
服务器处理上传文件一般都是先在请求中读取文件信息,然后改变名称保存在服务器的临时路径下,最后保存到服务器磁盘中。本次以thymeleaf搭建demo,因此需要引入thymeleaf依赖库。
org.springframework.boot spring-boot-starter-thymeleaf 2.5.5
如果使用的是gradle构建的项目,需要修改build.gradle文件:
compile 'org.springframework.boot:spring-boot-starter-thymeleaf:2.5.5'
新建一个Action类负责处理上传的文件:
@RestController@RequestMapping("/upload/*")public class UploadAction { @PostMapping("/file") public Object uploadHandler(HttpServletRequest request, String title, MultipartFile file) { MapresultMap = new LinkedHashMap<>(); resultMap.put("title", title); resultMap.put("fileName", file.getName()); // 文件名 resultMap.put("originalFilename", file.getOriginalFilename()); // 原始名称 resultMap.put("content-type", file.getContentType()); // 文件类型 resultMap.put("fileSize", file.getSize() / 1024 + "K"); // 文件大小 try { // 保存文件 String uploadedFilePath = saveFile(request, file.getInputStream(), file.getOriginalFilename() .substring(file.getOriginalFilename().lastIndexOf(".") + 1)); resultMap.put("uploadedFilePath", uploadedFilePath); // 文件大小 } catch (IOException e) { System.err.println("error-path: /upload/file, message: " + e.getMessage()); } return resultMap; } /** * 保存上传的文件到本地服务器 * * @param request HttpServletRequest * @param input 输入流 * @param ext 文件扩展名 * @return 文件路径 * @throws IOException */ public String saveFile(HttpServletRequest request, InputStream input, String ext) throws IOException { String realPath = request.getServletContext().getRealPath("/upload/file/"); // 取得服务器真实路径 File file = new File(realPath); if (!file.getParentFile().exists()) { // 目录不存在 file.mkdirs(); // 创建多级目录 } String filePath = realPath + UUID.randomUUID() + "." + ext; // 取的文件输出流 OutputStream out = new FileOutputStream(filePath); byte[] data = new byte[2048]; // 缓冲数组2KB int len = 0; // 读取字节长度 while ((len = input.read(data)) != -1) { out.write(data, 0, len); // 文件写入磁盘 } if (input != null) { input.close(); } out.close(); return filePath; }}
在resources目录下新建templates文件夹,在里面创建index.html文件作为项目首页展示。
文件上传测试
启动项目,直接访问:http://localhost:8080/将进入index.html页面。
点击上传按钮,文件将被保存到服务器磁盘中:
SpringBoot对上传文件处理的简化
SpringBoot对FileUpload组件进行了整合,在文件保存的时候可以避免直接操作IO流,通过配置文件的方式指定文件上传的限制参数。修改application.yml文件:
server: port: 8080spring: servlet: multipart: enabled: true # 启用文件上传 max-file-size: 1MB # 单文件上传最大限制 max-request-size: 10MB # 文件上传最大值 file-size-threshold: 10KB # 上传文件达到多大时写入磁盘 location: / # 临时文件存储位置
修改UploadAction,使用MultipartFile类的transferTo方法保存上传文件。
@RestController@RequestMapping("/upload/*")public class UploadAction { @PostMapping("/file") public Object uploadHandler(HttpServletRequest request, String title, MultipartFile file) { MapresultMap = new LinkedHashMap<>(); resultMap.put("title", title); resultMap.put("fileName", file.getName()); // 文件名 resultMap.put("originalFilename", file.getOriginalFilename()); // 原始名称 resultMap.put("content-type", file.getContentType()); // 文件类型 resultMap.put("fileSize", file.getSize() / 1024 + "K"); // 文件大小 try { // 保存文件 String etc = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf(".") + 1); String serverPath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/file/upload/"; String fileName = UUID.randomUUID() + "." + etc; resultMap.put("filePath", serverPath + fileName); // 文件地址(服务器访问地址) // 文件保存再真实路径下 File saveFile = new File(request.getServletContext().getRealPath("/file/upload/") + fileName); if (!saveFile.getParentFile().exists()) { // 目录不存在,创建目录 saveFile.mkdirs(); } file.transferTo(saveFile); // 保存上传文件 } catch (IOException e) { System.err.println("error-path: /upload/file, message: " + e.getMessage()); } return resultMap; }}
访问:http://localhost:8080/
点击上传按钮:
在浏览器上访问filePath,可以预览上传的文件:
感谢你能够认真阅读完这篇文章,希望小编分享的"SpringBoot如何实现文件上传功能"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!
文件
服务器
服务
目录
磁盘
篇文章
路径
名称
大小
项目
处理
功能
原始
最大
地址
按钮
文件名
类型
限制
价值
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
安徽正规软件开发批发价
软件开发软件项目
大话西游手游服务器列表
工信委网络安全工作
网易服务器质量如何
电脑网络连接服务器断开
网络安全公益视频在线观看
电脑网络安全模式需要多长时间
酌希互联网科技
电大数据库应用考题
web服务器 html5
徐晓阳网络安全
中国电器院软件开发岗位
软件开发外包后的出路
网络技术基础一般学什么
通信网络安全管理员中级理论考试
数据库只存储数据
网络安全微课名称
电力监控系统网络安全 指南
网络安全教育网络诈骗
电信联通才有服务器
云盘服务器进行文档的集中管理
网络安全工作年度工作计划
软件开发介绍费多少钱
玩游戏的服务器多少钱
数据库表中添加一个字段
金寨软件开发者在线咨询
珠海软件开发市场价
计算机网络技术实务案例
激战2哪个服务器人多