如何用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";    

          

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

参考技术A 在网络编程过程中需要向服务器上传文件。Multipart/form-data是上传文件的一种方式。 Multipart/form-data其实就是浏览器用表单上传文件的方式。最常见的情境是:在写邮件时,向邮件后添加附件,附件通常使用表单添加,也就是用multipart/form-d...本回答被提问者采纳 参考技术B 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文件步骤,可以获取大小、路径

ckeditor5上传的图片如何用PHP接收?

CKEditor5自带的图片上传,定义了uploadUrl,但不知道怎么用PHP接收。还有一个疑问就是CKEditor5传递到upload.php的是文件路径还是二进制数据?问题已经解决,详细步骤在评论里

从图上看应该是传的文件用$_FIELES接收,
如果不行的话试试用file_get_contents('php://input');试试
参考技术A 官方教程中上传图片有三种方法
(1):使用CKEditor自带云服务,图片上传到CKEditor服务器;
(2):使用ckfinder框架,在初始化CKEditor时,需要定义 ckfinder的uploadUrl参数,参数为上传到自己服务器的地址;
(3)自己写上传功能,定义UploadAdapter,实现upload()和 abort() 方法,并对UploadAdapter进行调用。追问

定义了上传地址之后,后端需要接收一个名为 'file' 的文件,官方没有提到过传入后台的文件名字是什么,这才导致我原地打转许久。

本回答被提问者采纳

以上是关于如何用SpringBoot框架来接收multipart/form-data文件的主要内容,如果未能解决你的问题,请参考以下文章

ckeditor5上传的图片如何用PHP接收?

如何用springboot写helloworld

C语言中如何用gets();语句来接收一个二维数组

再见HTML !如何用Python写一个漂亮的网页?

如何用freertos接收串口数据

如何用注解简化SSH框架