Spring提供的API实现文件上传
Spring为我们提供了文件上传接口MultipartRequest
及其实现类StandardMultipartFile
StandardMultipartFile
是StandardMultipartHttpServletRequest
中的private
访问级别内部类。
MultipartRequest
的使用
场景一:上传单个文件或多个文件,不传递参数
/**
* @RequestParam("file") 可以省略
* @param file
**/
@RequestMapping("/")
public void test1(@RequestParam("file") MultipartFile file){
log.info("文件名:"+file.getOriginalFilename());
}
@RequestMapping("/")
public void test1(@RequestParam("files") MultipartFile[] file){
log.info("文件名:"+file[0].getOriginalFilename());
}
场景二:上传单个文件或多个文件,前端传递参数
/**
* 使用Map接收参数,@RequestParam必须
* @param file
* @param map
*/
@RequestMapping("/")
public void test1(@RequestParam("file") MultipartFile file,@RequestParam Map<String, Object> map){
log.info("文件名:"+file.getOriginalFilename());
log.info("姓名:"+map.get("name"));
log.info("年龄:"+map.get("age"));
}
/**
* request 前端使用form-data格式传递,所以可以使用request.getParameter获取参数
* @param file
* @param request
*/
@RequestMapping("/")
public void test1(@RequestParam("file") MultipartFile file,HttpServletRequest request){
log.info("文件名:"+file.getOriginalFilename());
log.info("姓名:"+request.getParameter("name"));
log.info("年龄:"+request.getParameter("age"));
}
/**
* 使用对应的参数实体类接收,如User
* @param file
* @param user
*/
@RequestMapping("/")
public void test1(@RequestParam("file") MultipartFile file,User user){
log.info("文件名:"+file.getOriginalFilename());
log.info("姓名:"+user.getName());
log.info("年龄:"+user.getAge());
}
StandardMultipartHttpServletRequest
的使用
@RequestMapping("/")
public void test1(HttpServletRequest request){
if(request instanceof StandardMultipartHttpServletRequest){
StandardMultipartHttpServletRequest servletRequest= (StandardMultipartHttpServletRequest) request;
//获取前端传入的参数
Map<String, String[]> paramMap=servletRequest.getParameterMap();
//获取上传的文件
Map<String, MultipartFile> fileMap = servletRequest.getFileMap();
}
}
分类:
Spring
, Spring Boot
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?