关于form表单提交文件file后台controller中参数获取不到的解决办法

本文介绍如何在SpringMVC中实现文件上传功能,包括配置文件解析器、引入依赖库及编写前端表单等步骤。

1.首先,我们需要在springmvc.xml配置文件中配置文件解析器

        <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
            <property name="maxUploadSize" value="10485760"></property>
        </bean>
 

上方bean id multipartResolve m开头必须小写 大写会导致获取参数为NULL

2.导入

commons-io和commons-fileupoad的jar包

3.接着,编写前端代码
enctype="multipart/form-data"不能省略,并且input标签的name属性也是必要的。

<form action="file/doSpringMvcFileUpload" method="post" enctype="multipart/form-data">
    选择文件:<input type="file" name="fileUpload"/>
    <br/>
    <input type="submit" value="上传"/>
</form>
 

### Form 表单提交的代码示例及 Controller 实现 #### HTML 部分 HTML 中通过 `<form>` 标签定义表单,并设置 `action` 和 `method` 属性来指定请求的目标地址和方法。 ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Form 提交示例</title> </head> <body> <form id="myForm" action="/submitForm" method="post"> 用户名: <input type="text" name="username"><br><br> 密码: <input type="password" name="password"><br><br> 年龄: <input type="number" name="age"><br><br> <input type="submit" value="提交"> </form> </body> </html> ``` 此代码片段展示了如何创建一个简单的 HTML 表单,其中包含用户名、密码和年龄字段[^3]。 --- #### JavaScript (可选 AJAX 提交) 如果希望使用 AJAX 提交表单,则可以借助 jQuery 的 `.ajax()` 方法完成异步操作: ```javascript function submitFormAjax() { $.ajax({ url: "/submitForm", type: "POST", data: $("#myForm").serialize(), success: function(response) { alert("成功:" + response); }, error: function(xhr, status, error) { console.error("错误:" + error); } }); } ``` 在此代码中,`$("#myForm").serialize()` 将表单数据序列化为键值对字符串并发送到服务器端[^2]。 --- #### Spring MVC Controller 实现 以下是基于 SSM 框架的一个简单 Controller 示例,用于接收前端传来的表单数据: ```java import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class FormController { @PostMapping("/submitForm") @ResponseBody public String handleFormSubmission( @RequestParam(name = "username") String username, @RequestParam(name = "password") String password, @RequestParam(name = "age", required = false) Integer age) { StringBuilder result = new StringBuilder(); result.append("接收到的数据如下:\n"); result.append("Username: ").append(username).append("\n"); result.append("Password: ").append(password).append("\n"); if (age != null) { result.append("Age: ").append(age.toString()).append("\n"); } else { result.append("Age not provided.\n"); } return result.toString(); } } ``` 该 Controller 使用了 `@PostMapping` 注解绑定 POST 请求路径 `/submitForm`,并通过 `@RequestParam` 获取表单中的参数。返回的结果是一个简单的字符串响应[^4]。 --- #### 文件上传扩展(可选) 对于文件上传场景,需调整表单配置以及 Controller 处理逻辑。以下是一个支持文件上传的例子: ##### 前端部分 ```html <form id="fileUploadForm" action="/uploadFile" method="post" enctype="multipart/form-data"> 选择文件: <input type="file" name="file"><br><br> 描述: <textarea name="description"></textarea><br><br> <input type="submit" value="上传"> </form> ``` 注意此处设置了 `enctype="multipart/form-data"` 来允许文件传输[^5]。 ##### 后端部分 ```java import org.springframework.web.multipart.MultipartFile; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/api/file") public class FileUploadController { @PostMapping("/uploadFile") public String uploadFile(@RequestParam("file") MultipartFile file, @RequestParam("description") String description) { if (!file.isEmpty()) { try { byte[] bytes = file.getBytes(); // 可保存至数据库或磁盘 System.out.println("描述信息: " + description); return "文件上传成功!"; } catch (Exception e) { return "文件处理失败: " + e.getMessage(); } } else { return "未检测到任何文件."; } } } ``` 这段代码实现了基本的文件上传功能,能够读取文件内容及其附加说明[^5]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值