springboot如何上传文件(代码片段)

ShuSheng007 ShuSheng007     2022-12-07     328

关键词:

[版权申明] 非商业目的注明出处可自由转载
出自:shusheng007

文章目录

概述

今天聊点实操类的小知识吧,没啥技术含量,但架不住实用…

在后端开发过程中偶尔会遇到文件的接收和上传的业务场景。接收呢是前端将文件传给后端,后端负责接收处理,上传呢是后端把文件上传到其他服务或者平台上。这两种场景下在SpringBoot中如何实现呢?

现代Java开发中,各种框架和三方库的封装使得各种常用功能已经简化到在不知其所以然的情况下也能完成了,不过我们还是要稍微提一下原理,使文章显得更加的专业和高大上,哈哈…。我们通常文件的上传实用HTTP的POST方法,Content-Type 为multipart/form-data类型的方式。我们日常比较熟悉的Content-Type是application/json,用来传递Json格式的数据,而对 multipart/form-data却不一定熟悉。

下面这个片段就是multipart/form-data的请求体,是不是感觉很复杂啊,我多年前第一次看见也觉得好复杂,当时还不会使用封装好的第三方Http客户端,然后就是使用原始的来构建,哎, 往事不堪回首…

POST /upload?upload_progress_id=12344 HTTP/1.1
Host: localhost:3000
Content-Length: 1325
Origin: http://localhost:3000
... other headers ...
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryePkpFF7tjBAqx29L

------WebKitFormBoundaryePkpFF7tjBAqx29L
Content-Disposition: form-data; name="MAX_FILE_SIZE"

100000
------WebKitFormBoundaryePkpFF7tjBAqx29L
Content-Disposition: form-data; name="uploadedfile"; filename="hello.o"
Content-Type: application/x-object

... contents of file goes here ...
------WebKitFormBoundaryePkpFF7tjBAqx29L--

----WebKitFormBoundaryePkpFF7tjBAqx29L 是每一part的分割符,必须以--开头,请求体最后也必须以--结尾,值可以是任意的。大体了解一下multipart/form-data的请求格式就好啦,现在你都不用自己去手写,都被框架给封装了,你只要知道你要上传的文件就是其中的一个part就好了。

接收文件

在Springboot中接收前端上传的文件很简单,在HTTP的Post方法中使用MultipartFile接收就ok了,如下代码所示

@PostMapping("/uploadFile")
public AjaxResult upload(@RequestParam("file") MultipartFile file, @RequestParam("other") String other) 
     ...

那个如果你除了文件还有其他参数,那就使用@RequestParam继续接收,有几个写几个就好。

上传文件

这个就比较麻烦点了,我们以RestTemplate来实现

  1. 设置Content-Type为multipart/form-data
 HttpHeaders headers = new HttpHeaders();
 headers.setContentType(MediaType.MULTIPART_FORM_DATA);

第二句代码就是设置http请求的content-type 为multipart/form-data

  1. 构建请求体
 MultiValueMap<String,Object> body = new LinkedMultiValueMap<>();
 body.add("file",new FileSystemResource(targetFile));
 body.add("param","其他参数");

 HttpEntity<MultiValueMap<String,Object>> requestEntity = new HttpEntity<>(body,headers);

值得注意的是加到body里的需要一个Resource类型,我们这里使用File类型的targetFile构建了FileSystemResource。除了要上传的文件,我们还可以往body里面添加其他参数,像这里的param参数。

最后使用第一步与这一步的数据构建一个requestEntity

  1. 发起请求

通过上面两步已经构建了发起post请求的参数了,我们使用RestTemplate发起请求就好了

 try 
     ResponseEntity<String> response = restTemplateBuilder
             .basicAuthentication(AUTH_USER,AUTH_PASSWORD)
             .build()
             .postForEntity(UPLOAD_URL,requestEntity,String.class);
     return response.getBody();
  catch (RestClientException e) 
     log.info("上传文件失败:",e.getMessage());
 

值得注意的是,我们这里使用了RestTemplateBuilder来构建RestTemplate,而且通过basicAuthentication设置了basic auth。如果你要上传的平台没有要求basic auth鉴权,那么去掉就可以了。

gitbub源码

你可以在这里:文件上传示例 找到完整的源码,记得点下小星星,那样就不怕找不到了…

结论

干…

springboot2.x:文件上传(代码片段)

...而是本地的一个固定路径或者是一个文件服务器路径 SpringBoot的路径:src/main/java:存放代码src/main/resources:存放资源  static:存放静态文件:css、js、ima 查看详情

springboot文件上传:单个文件上传和多个文件上传(代码片段)

单个文件上传 //文件上传统一处理@RequestMapping(value="/upload",method=RequestMethod.POST)@ResponseBodypublicWangEditoruploadFile(@RequestParam("myFile")MultipartFilemultipartFile,HttpServletRequestrequest)try 查看详情

springboot整合vue实现上传下载文件(代码片段)

springboot整合vue实现上传下载文件文章目录springboot整合vue实现上传下载文件1上传下载文件api文件2.上传大文件配置3.vue前端主要部分环境springboot1.5.x完整代码下载:springboot整合vue实现上传下1上传下载文件api文件设置上传路径&... 查看详情

springboot上传文件(代码片段)

@PostMapping("/upload")//springboot可以直接扫描resource下的static文件夹下的静态文件publicStringupload(@RequestParam("head_img")MultipartFilefile)Stringname=request.getParameter("name");log.info(name);StringfileName=f 查看详情

eclipse搭建springboot项目文件上传(代码片段)

知识点:SpringBoot2.x文件上传:HTML页面文件上传和后端处理1、springboot文件上传MultipartFilefile,源自SpringMVC  1)静态页面直接访问:localhost:8080/index.html     注意点:如果想要直接访问html页面,则需要把html放在springboot默... 查看详情

springboot.08.springboot文件上传与下载(代码片段)

SpringBoot.08.SpringBoot文件上传与下载前言文件上传1.新建Module2.项目配置3.pom.xml4.application-dev.yml5.设置Workingdirectory6.upload.jsp7.File相关7.1FileController.java7.2FileConstants.java7.3FileUtils.java8.MyWebMvcConfigu 查看详情

springboot.08.springboot文件上传与下载(代码片段)

SpringBoot.08.SpringBoot文件上传与下载前言文件上传1.新建Module2.项目配置3.pom.xml4.application-dev.yml5.设置Workingdirectory6.upload.jsp7.File相关7.1FileController.java7.2FileConstants.java7.3FileUtils.java8.MyWebMvcConfigu 查看详情

springboot.08.springboot文件上传与下载(代码片段)

SpringBoot.08.SpringBoot文件上传与下载前言文件上传1.新建Module2.项目配置3.pom.xml4.application-dev.yml5.设置Workingdirectory6.upload.jsp7.File相关7.1FileController.java7.2FileConstants.java7.3FileUtils.java8.MyWebMvcConfigu 查看详情

vue+element(文件上传控件)+springboot文件上传功能(代码片段)

文件上传效果展示:文件上传效果预览文件上传删除  Vue前端核心代码<el-form-itemlabel="文件上传"><el-uploaddragmultiplename="multipartfiles"ref="upload":limit=1:action="imageAction 查看详情

上传文件慢,springboot分片上传文件(代码片段)

Java上传文件慢,大文件上传卡顿,请求超时怎么办?话不多说直接上代码,代码复制过去可以直接使用第一步:创建后端代码packagecn.leon.demo.rest;importlombok.extern.slf4j.Slf4j;importorg.apache.commons.io.FileUtils;importorg.sp 查看详情

springboot处理文件上传及映射路径(代码片段)

样例代码-------------先编写一个文件上传页面```/static/upload-test.html```新建文件上传处理Controller文件上传路径回显先编写一个文件上传页面/static/upload-test.html请求路径为/upload其中enctype=multipart/form-data是将文件... 查看详情

springboot文件上传限制(yml配置)(代码片段)

一、文件上传大小配置-------springboot2.0以后----------spirng: servlet:multipart:max-file-size:100MBmax-request-size:100MB-------springboot2.0以前----------spring: http:  multipart:  max-file-size:100MB  max-request 查看详情

springboot的文件上传与下载(代码片段)

SpringBoot的文件上传与下载文件上传和下载是Web开发应用中最常用的功能之一,本次将学习在SpringBoot的web开发实例中实现文件的上传和下载。在实际web开发中,为了文件上传成功,必须将表单的method方法设置post,... 查看详情

springboot上传文件到阿里云oss(代码片段)

/***方法描述:文件上传**@authorleon2017年7月25日上午10:54:37*@paramrequest*@paramresponse*@return*/@RequestMapping(value="/upload",method=RequestMethod.POST)@ResponseBodypubl 查看详情

springboot配置文件上传大小限制(代码片段)

版权声明本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl背景描述在使用SpringBoot进行文件上传时,报错信息如下:nestedexceptionisjava.lang.IllegalStateException:org.apache.tomcat.util.http.fileupload.Fi 查看详情

springboot2.x实现文件上传与下载(代码片段)

...IO流的方式进行上传和下载文件,本文讲解几种基于SpringBoot2.x来实现文件上传与下载的操作。文件上传配置文件上传大小限制spring.servlet.multipart.max-file-size 查看详情

jquery+springboot文件上传(代码片段)

前端<!DOCTYPEhtml><htmllang="zh"><head><title></title><metacharset="utf-8"><metaname="viewport"content="width=devic 查看详情

解决使用springboot上传文件大小受限问题(代码片段)

今天在做项目学习的过程中,需要用到文件上传,启动项目正常,访问上传post请求突然报出了一个异常,特此记录一下。1、控制台异常org.springframework.web.multipart.MaxUploadSizeExceededException:Maximumuploadsizeexceeded;nestedexce... 查看详情