如何用SpringBoot框架来接收multipart/form-data文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何用SpringBoot框架来接收multipart/form-data文件相关的知识,希望对你有一定的参考价值。
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";
这样就可以实现对多个文件的接收了功能了。
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文件步骤,可以获取大小、路径
ckeditor5上传的图片如何用PHP接收?
CKEditor5自带的图片上传,定义了uploadUrl,但不知道怎么用PHP接收。还有一个疑问就是CKEditor5传递到upload.php的是文件路径还是二进制数据?问题已经解决,详细步骤在评论里
如果不行的话试试用file_get_contents('php://input');试试 参考技术A 官方教程中上传图片有三种方法
(1):使用CKEditor自带云服务,图片上传到CKEditor服务器;
(2):使用ckfinder框架,在初始化CKEditor时,需要定义 ckfinder的uploadUrl参数,参数为上传到自己服务器的地址;
(3)自己写上传功能,定义UploadAdapter,实现upload()和 abort() 方法,并对UploadAdapter进行调用。追问
定义了上传地址之后,后端需要接收一个名为 'file' 的文件,官方没有提到过传入后台的文件名字是什么,这才导致我原地打转许久。
本回答被提问者采纳以上是关于如何用SpringBoot框架来接收multipart/form-data文件的主要内容,如果未能解决你的问题,请参考以下文章