如何将多部分文件和表单数据一起发送到Spring控制器

问题描述 投票:0回答:1

在表单中有许多文本字段和四个多部分文件,我必须将它们一起发送到弹簧控制器。请建议如何在 spring 3.x 中完成。

我是Spring框架的新手,无论如何也没找到。我发现的所有示例都是 Springboot,不适用于 Spring 3.x

spring-mvc spring-3
1个回答
0
投票

要将多部分文件和表单数据一起发送到 Spring 控制器,您可以使用以下代码片段:

在 JSP 中:

<form method="POST" action="uploadMultipleFile" enctype="multipart/form-data">
    File1 to upload: <input type="file" name="file"><br /> 
    Name1: <input type="text" name="name"><br /> <br /> 
    File2 to upload: <input type="file" name="file"><br /> 
    Name2: <input type="text" name="name"><br /> <br />
    <input type="submit" value="Upload"> Press here to upload the file!
</form>

在你的控制器中你可以接收类似这样的数据:

@RequestMapping(value = "/uploadMultipleFile", method = RequestMethod.POST)
public @ResponseBody
String uploadMultipleFileHandler(@RequestParam("name") String[] names,
        @RequestParam("file") MultipartFile[] files) {

    if (files.length != names.length)
        return "Mandatory information missing";

    String message = "";
    for (int i = 0; i < files.length; i++) {
        MultipartFile file = files[i];
        String name = names[i];
        try {
            byte[] bytes = file.getBytes();

            // Creating the directory to store file
            String rootPath = System.getProperty("catalina.home");
            File dir = new File(rootPath + File.separator + "tmpFiles");
            if (!dir.exists())
                dir.mkdirs();

            // Create the file on server
            File serverFile = new File(dir.getAbsolutePath()
                    + File.separator + name);
            BufferedOutputStream stream = new BufferedOutputStream(
                    new FileOutputStream(serverFile));
            stream.write(bytes);
            stream.close();

            logger.info("Server File Location="
                    + serverFile.getAbsolutePath());

            message = message + "You successfully uploaded file=" + name
                    + "<br />";
        } catch (Exception e) {
            return "You failed to upload " + name + " => " + e.getMessage();
        }
    }
    return message;
}

您可以查看此示例:文件上传

另一种方法是这样的点击这里

© www.soinside.com 2019 - 2024. All rights reserved.