怎么用SpringBoot框架来接收multipart/form-data文件(form-data,multipart,springboot,开发技术)

时间:2024-05-07 01:29:06 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

SpringBoot框架接收multipart/form-data文件

现在很多文件上传类型都是multipart/form-data类型的,HTTP请求如下所示:

怎么用SpringBoot框架来接收multipart/form-data文件

可是问题就在于如果用传统的Struts2或者servlet等都可以很容易的实现文件接收的功能,例如下面的代码就可以实现:

booleanisMultipart=ServletFileUpload.isMultipartContent(request);//判断是否是表单文件类型DiskFileItemFactoryfactory=newDiskFileItemFactory();ServletFileUploadsfu=newServletFileUpload(factory);Listitems=sfu.parseRequest(request);//从request得到所有上传域的列表for(Iteratoriter=items.iterator();iter.hasNext();){FileItemfileitem=(FileItem)iter.next();if(!fileitem.isFormField()&&fileitem!=null){//判读不是普通表单域即是fileSystem.out.println("name:"+fileitem.getName());}}

可是今天我把这一段代码放在SpringBoot上面的时候就怎么也接收不到文件信息了,一直以为是前端什么数据传输错了。后来才知道原来SpringBoot有它自己的接收请求的代码。下面就给大家详细介绍一下它是如何实现这个功能的。

首选做一个简单的案例,也就是单个文件上传的案例。(这个案例是基于SpringBoot上面的,所以大家首先得搭建好SpringBoot这个框架)

前台HTML代码:

<html><body><formaction="/upload"method="POST"enctype="multipart/form-data"><inputtype="file"name="file"/><inputtype="submit"value="Upload"/></form></body></html>

怎么用SpringBoot框架来接收multipart/form-data文件

后台接收代码:

/***文件上传具体实现方法;**@paramfile*@return*/@RequestMapping("/upload")@ResponseBodypublicStringhandleFileUpload(@RequestParam("file")MultipartFilefile){if(!file.isEmpty()){try{/**这段代码执行完毕之后,图片上传到了工程的跟路径;大家自己扩散下思维,如果我们想把图片上传到*d:/files大家是否能实现呢?等等;*这里只是简单一个例子,请自行参考,融入到实际中可能需要大家自己做一些思考,比如:1、文件路径;2、文件名;*3、文件格式;4、文件大小的限制;*/BufferedOutputStreamout=newBufferedOutputStream(newFileOutputStream(newFile(file.getOriginalFilename())));System.out.println(file.getName());out.write(file.getBytes());out.flush();out.close();}catch(FileNotFoundExceptione){e.printStackTrace();return"上传失败,"+e.getMessage();}catch(IOExceptione){e.printStackTrace();return"上传失败,"+e.getMessage();}return"上传成功";}else{return"上传失败,因为文件是空的.";}}

这样就可以实现对multipart/form-data类型文件的接收了。那如果是多个文件外加多个字段呢,下面接着看下一个多个文件上传的案例。

前台HTML界面:

<!DOCTYPEhtml><htmlxmlns="http://www.w3.org/1999/xhtml"xmlns:th="http://www.thymeleaf.org"xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3"><head><title>HelloWorld!</title></head><body><formmethod="POST"enctype="multipart/form-data"action="/batch/upload"><p>文件1:<inputtype="text"name="id"/></p><p>文件2:<inputtype="text"name="name"/></p><p>文件3:<inputtype="file"name="file"/></p><p><inputtype="submit"value="上传"/></p></form></body></html>

怎么用SpringBoot框架来接收multipart/form-data文件

后台接收代码:

@RequestMapping(value="/batch/upload",method=RequestMethod.POST)@ResponseBodypublicStringhandleFileUpload(HttpServletRequestrequest){MultipartHttpServletRequestparams=((MultipartHttpServletRequest)request);List<MultipartFile>files=((MultipartHttpServletRequest)request).getFiles("file");Stringname=params.getParameter("name");System.out.println("name:"+name);Stringid=params.getParameter("id");System.out.println("id:"+id);MultipartFilefile=null;BufferedOutputStreamstream=null;for(inti=0;i<files.size();++i){file=files.get(i);if(!file.isEmpty()){try{byte[]bytes=file.getBytes();stream=newBufferedOutputStream(newFileOutputStream(newFile(file.getOriginalFilename())));stream.write(bytes);stream.close();}catch(Exceptione){stream=null;return"Youfailedtoupload"+i+"=>"+e.getMessage();}}else{return"Youfailedtoupload"+i+"becausethefilewasempty.";}}return"uploadsuccessful";}

这样就可以实现对多个文件的接收了功能了。

SpringBoot还可以对接收文件的格式还有个数等等进行限制,我这里就不多说了,大家有兴趣的可以自己去了解了解。

千万要记住SpringBoot对multipart/form-data类型的文件接收和其它是不一样的,大家以后遇到的时候要千万小心,不要像我一样一往无前的踩进去还傻傻的以为是前端的错误。

SpringBoot接收文件

packagecn.juhe.controller;importnet.sf.json.JSONObject;importorg.springframework.web.bind.annotation.PostMapping;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;importorg.springframework.web.multipart.MultipartFile;importorg.springframework.web.multipart.MultipartHttpServletRequest;importjavax.servlet.http.HttpServletRequest;importjava.io.BufferedOutputStream;importjava.io.File;importjava.io.FileOutputStream;importjava.io.IOException;importjava.util.Date;importjava.util.Iterator;importjava.util.List;importjava.util.Random;@RestControllerpublicclassUploadTest{/***接受未知参数名的多个文件或者一个文件**@paramrequest请求*@return返回*/@PostMapping("/upload")publicJSONObjecthandleFileUpload(HttpServletRequestrequest){Iterator<String>fileNames=((MultipartHttpServletRequest)request).getFileNames();JSONObjectresult=null;while(fileNames.hasNext()){Stringnext=fileNames.next();MultipartFilefile=((MultipartHttpServletRequest)request).getFile(next);System.out.println("file.getName():"+file.getName());System.out.println("file.getOriginalFilename():"+file.getOriginalFilename());Stringfolder="E:\\upload\\received\\";StringpicName=newDate().getTime()+".jpg";Filefilelocal=newFile(folder,picName);result=newJSONObject();result.put(picName,folder+picName);try{file.transferTo(filelocal);}catch(IOExceptione){e.printStackTrace();}}JSONObjectjsonObject=newJSONObject();jsonObject.put("error_code",223805);jsonObject.put("reason","文件过大或上传发生错误");Randomrandom=newRandom();if(random.nextInt(10)>3){jsonObject.put("error_code",0);jsonObject.put("reason","success");jsonObject.put("result",result);}returnjsonObject;}/***知道参数名的文件上传**@parammultipartFile文件*@return返回*@throwsIOException*/@PostMapping("/uploadCommon")//publicJSONObjectupload(MultipartFilemultipartFile)throwsIOException{publicJSONObjectupload(@RequestParam("A")MultipartFilemultipartFile)throwsIOException{Stringname=multipartFile.getName();//上传文件的参数名StringoriginalFilename=multipartFile.getOriginalFilename();//上传文件的文件路径名longsize=multipartFile.getSize();//文件大小Stringfolder="E:\\upload\\received\\";StringpicName=newDate().getTime()+".jpg";Filefilelocal=newFile(folder,picName);multipartFile.transferTo(filelocal);/*{"reason":"success","result":{"D":"/upload/order/files/2016/a72750ad-8950-4949-b04a-37e69aff0d23.jpg","A":"/upload/order/files/2016/6842811a-eb76-453b-a2f3-488e2bb4500e.jpg","B":"/upload/order/files/2016/ccc96347-3cb8-4e2e-99a3-0c697b57eb88.jpg","C":"/upload/order/files/2016/d470d533-a54b-406a-a0f9-bbf82c314755.jpg"},"error_code":0}*/JSONObjectjsonObject=newJSONObject();jsonObject.put("error_code",223805);jsonObject.put("reason","文件过大或上传发生错误");Randomrandom=newRandom();if(random.nextInt(10)>3){jsonObject.put("error_code",0);jsonObject.put("reason","success");JSONObjectresult=newJSONObject();result.put(name,folder+picName);jsonObject.put("result",result);}returnjsonObject;}}
 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:怎么用SpringBoot框架来接收multipart/form-data文件的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Docker查询、停止、删除和重启容器的方法是什么下一篇:

9 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18