如何用SpringBoot框架来接收multipart/form-data文件

 我来答
简乱千因1S
2017-11-02 · TA获得超过2270个赞
知道大有可为答主
回答量:1003
采纳率:100%
帮助的人:212万
展开全部

SpringBoot有它自己的接收请求的代码。下面就给大家详细介绍一下它是如何实现单个文件和多个文件上传的功能的。

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

前台HTML代码:

[html] view plain copy

  • <html>    

  • <body>    

  • <form action="/upload" method="POST" enctype="multipart/form-data">    

  • <input type="file" name="file"/>    

  • <input type="submit" value="Upload"/>     

  • </form>    

  • </body>    

  • </html>    

  • 后台接收代码:


    [java] view plain copy

  • /**    

  • * 文件上传具体实现方法;    

  • *     

  • * @param file    

  • * @return    

  • */      

  • @RequestMapping("/upload")      

  • @ResponseBody      

  • public String handleFileUpload(@RequestParam("file") MultipartFile file) {      

  • if (!file.isEmpty()) {      

  • try {      

  • /*    

  • * 这段代码执行完毕之后,图片上传到了工程的跟路径; 大家自己扩散下思维,如果我们想把图片上传到    

  • * d:/files大家是否能实现呢? 等等;    

  • * 这里只是简单一个例子,请自行参考,融入到实际中可能需要大家自己做一些思考,比如: 1、文件路径; 2、文件名;    

  • * 3、文件格式; 4、文件大小的限制;    

  • */      

  • BufferedOutputStream out = new BufferedOutputStream(      

  • new FileOutputStream(new File(      

  • file.getOriginalFilename())));      

  • System.out.println(file.getName());    

  • out.write(file.getBytes());      

  • out.flush();      

  • out.close();      

  • } catch (FileNotFoundException e) {      

  • e.printStackTrace();      

  • return "上传失败," + e.getMessage();      

  • } catch (IOException e) {      

  • e.printStackTrace();      

  • return "上传失败," + e.getMessage();      

  • }      

  • return "上传成功";      

  • } else {      

  • return "上传失败,因为文件是空的.";      

  • }      

  • }      

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

    前台HTML界面:

    [html] view plain copy

  • <!DOCTYPE html>      

  • <html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"      

  • xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3">      

  • <head>      

  • <title>Hello World!</title>      

  • </head>      

  • <body>      

  • <form method="POST" enctype="multipart/form-data" action="/batch/upload">       

  • <p>文件1:<input type="text" name="id" /></p>      

  • <p>文件2:<input type="text" name="name" /></p>      

  • <p>文件3:<input type="file" name="file" /></p>      

  • <p><input type="submit" value="上传" /></p>      

  • </form>      

  • </body>      

  • </html>       

  • 后台接收代码:

    [java] view plain copy

  • @RequestMapping(value = "/batch/upload", method = RequestMethod.POST)      

  • @ResponseBody      

  • public String handleFileUpload(HttpServletRequest request) {      

  • MultipartHttpServletRequest params=((MultipartHttpServletRequest) request);    

  • List<MultipartFile> files = ((MultipartHttpServletRequest) request)      

  • .getFiles("file");     

  • String name=params.getParameter("name");    

  • System.out.println("name:"+name);    

  • String id=params.getParameter("id");    

  • System.out.println("id:"+id);    

  • MultipartFile file = null;      

  • BufferedOutputStream stream = null;      

  • for (int i = 0; i < files.size(); ++i) {      

  • file = files.get(i);      

  • if (!file.isEmpty()) {      

  • try {      

  • byte[] bytes = file.getBytes();      

  • stream = new BufferedOutputStream(new FileOutputStream(      

  • new File(file.getOriginalFilename())));      

  • stream.write(bytes);      

  • stream.close();      

  • } catch (Exception e) {      

  • stream = null;      

  • return "You failed to upload " + i + " => "      

  • + e.getMessage();    

  • }      

  • } else {      

  • return "You failed to upload " + i      

  • + " because the file was empty.";      

  • }    

  • }      

  • return "upload successful";    

  • }      

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

智者总要千虑
高粉答主

2017-11-02 · 说的都是干货,快来关注
知道顶级答主
回答量:7.9万
采纳率:88%
帮助的人:1.3亿
展开全部
在网络编程过程中需要向服务器上传文件。Multipart/form-data是上传文件的一种方式。 Multipart/form-data其实就是浏览器用表单上传文件的方式。最常见的情境是:在写邮件时,向邮件后添加附件,附件通常使用表单添加,也就是用multipart/form-d...
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
bj...b@163.com
2017-11-02 · TA获得超过189个赞
知道小有建树答主
回答量:515
采纳率:5%
帮助的人:139万
展开全部
boolean isMultipart = ServletFileUpload.isMultipartContent(request);//判断是否是表单文件类型
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload sfu = new ServletFileUpload(factory);
List items = sfu.parseRequest(request);//从request得到所有上传域的列表
for(Iterator iter = items.iterator();iter.hasNext();){
FileItem fileitem =(FileItem) iter.next();
if(!fileitem.isFormField()&&fileitem!=null){//判读不是普通表单域即是file
操作fileitem文件步骤,可以获取大小、路径
}
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式