JAVA入门[16]-form表单,上传文件
一、如何传递参数
使用 @RequestParam 可以传递查询参数。例如:http://localhost:8092/category/detail?id=1
- @RequestMapping("/detail")
- public String detail(@RequestParam("id") int id,Model model){
- Category category=new Category();
- category.setCateId(id);
- category.setCateName("测试分类"+id);
- model.addAttribute("cate",category);
- return "detail.html";
- }
使用 @PathVariable可以传递路径参数。例如:http://localhost:8092/category/edit/1
- @RequestMapping(value = "/edit/{id}",method = RequestMethod.GET)
- public String edit(@PathVariable("id") int id,Model model) {
- //todo:get category from db
- Category category=new Category();
- category.setCateId(id);
- category.setCateName("测试分类"+id);
- model.addAttribute("cate",category);
- return "edit.html";
- }
二、校验表单
1.首先定义实体类。
- public class Category{
- public Category(){}
- @NotNull
- @Min(1)
- private int cateId;
- @NotNull
- private String cateName;
- public int getCateId() {
- return cateId;
- }
- public void setCateId(int cateId) {
- this.cateId = cateId;
- }
- public String getCateName() {
- return cateName;
- }
- public void setCateName(String cateName) {
- this.cateName = cateName;
- }
- }
2.表单edit.html
- <form method="post" th:object="${cate}" th:action="@{/category/save}" enctype="multipart/form-data">
- <table>
- <tr>
- <td>id:</td>
- <td><input type="text" th:field="*{cateId}"></td>
- </tr>
- <tr>
- <td>name:</td>
- <td><input type="text" th:field="*{cateName}"></td>
- </tr>
- <tr>
- <td colspan="2">
- <input type="submit" value="提交">
- </td>
- </tr>
- </table>
- </form>
3.通过给action方法的参数添加@Valid注解,这会告知Spring,需要确保这个对象满足校验限制
- @RequestMapping(value = "/save",method = RequestMethod.POST)
- public String save( @Valid Category category, Errors errors) throws IOException {...}
错误可以通过Errors对象进行访问,现在这个对象已作为processRegistration()方法的参数。(很重要一点需要注意,Errors参数要紧跟在带有@Valid注解的参数后面,@Valid注解所标注的就是要检验的参数。
三、上传图片
1.设置web.xml配置
web.xml配置multipart-config
- <servlet>
- <servlet-name>springmvc</servlet-name>
- <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- <multipart-config>
- <location></location>
- <max-file-size>2097152</max-file-size>
- <max-request-size>4194304</max-request-size>
- </multipart-config>
- </servlet>
2.from表单
form要将enctype属性设置为multipart/form-data,这就告诉浏览器以multipart数据的形式提交表单
input标签要把type设置为file,这能够让用户选择要上传的图片文件。accept属性用来将文件类型限制为JPEG、PNG以及GIF图片。根据其name属性,图片数据将会发送到multipart请求中的profilePicture part之中
- <form method="post" th:object="${cate}" th:action="@{/category/save}" enctype="multipart/form-data">
- <table>
- <tr>
- <td>id:</td>
- <td><input type="text" th:field="*{cateId}"></td>
- </tr>
- <tr>
- <td>name:</td>
- <td><input type="text" th:field="*{cateName}"></td>
- </tr>
- <tr>
- <td>file:</td>
- <td>
- <input type="file" accept="image/jpeg,image/png,image/jpg" name="picture">
- </td>
- </tr>
- <tr>
- <td colspan="2">
- <input type="submit" value="提交">
- </td>
- </tr>
- </table>
- </form>
3.controller:
@RequestPart :图片对应的参数要添加该注解
spring提供了Multipart MultipartFile对象,它为处理multipart数据提供了内容更为丰富的对象
transferTo() ,它能够帮助我们将上传的文件写入到文件系统中
- @RequestMapping(value = "/save",method = RequestMethod.POST)
- public String save(@RequestPart("picture") MultipartFile picture, @Valid Category category, Errors errors) throws IOException {
- //todo:save file to image server
- String filepath=request.getRealPath("/")+"upload/"+picture.getOriginalFilename();
- picture.transferTo(new File(filepath));
- if(errors.hasErrors()){
- return "edit.html";
- }
- //todo:save category to db
- return "redirect:/category/detail?id="+category.getCateId();
- }
JAVA入门[16]-form表单,上传文件的更多相关文章
- Java如何解决form表单上传文件,以及页面返回处理结果通知!
前端JSP代码 <form id='formSumbit' class='form-horizontal' action='/ncpay/route/chlsubmcht/batchImpor' ...
- django 基于form表单上传文件和基于ajax上传文件
一.基于form表单上传文件 1.html里是有一个input type="file" 和 ‘submit’的标签 2.vies.py def fileupload(request ...
- 巨蟒python全栈开发django11:ajax&&form表单上传文件contentType
回顾: 什么是异步? 可以开出一个线程,我发出请求,不用等待返回,可以做其他事情. 什么是同步? 同步就是,我发送出了一个请求,需要等待返回给我信息,我才可以操作其他事情. 局部刷新是什么? 通过jq ...
- vue form表单上传文件
<script src="https://cdn.staticfile.org/vue-resource/1.5.1/vue-resource.min.js">< ...
- 使用form表单上传文件
在使用form表单上传文件时候,input[type='file']是必然会用的,其中有一些小坑需要避免. 1.form的 enctype="multipart/form-data" ...
- JsonResponse类的使用、form表单上传文件补充、CBV和FBV、HTML的模板语法之传值与过滤器
昨日内容回顾 Django请求生命周期 # 1.浏览器发起请求 到达Django的socket服务端(web服务网关接口) 01 wsgiref 02 uwsgi + nginx 03 WSGI协议 ...
- nodejs 模拟form表单上传文件
使用nodejs来模拟form表单进行文件上传,可以同时上传多个文件. 以前项目里有这个方法,最近在客户那里出问题了,同事说,这个方法从来就没管用过,SO,用了一天时间把这个方法给搞出来了(觉得花费的 ...
- form表单上传文件使用multipart请求处理
在开发Web应用程序时比较常见的功能之一,就是允许用户利用multipart请求将本地文件上传到服务器,而这正是Grails的坚固基石——spring MVC其中的一个优势.Spring通过对Serv ...
- PHP 后台程序配置config文件,及form表单上传文件
一,配置config文件 1获取config.php文件数组, 2获取form 表单提交的值 3保存更新config.php文件,代码如下: $color=$_POST['color']; $back ...
- 通过form表单上传文件获取后台传来的数据
小伙伴是不是遇到过这样的问题,通过submit提交form表单的时候,不知怎么获取后台传来的返回值.有的小伙伴就会说你不会发送ajax,其实也会.假如提交的form表单中含有文件,怎么办? 步骤1:想 ...
随机推荐
- HTML出现错位的问题
引起网页HTML显示错位的几个常见问题: 1.在HTML代码中缺失元素的开始或结束标签 2.CSS设置中对边界.填充或边框的设置超出了父级容器的范围 3.CSS和HTML的编码不统一 4.浏览器的解析 ...
- PHP通过Zabbix API获取服务器监控信息
开源监控系统Zabbix提供了丰富的API,供第三方系统调用. 基本步骤如下: 1.获取合法认证:连接对应Zabbix URL,并提供用户名和密码,HTTP方法为"POST",HT ...
- Spring的IOC容器第一辑
一.Spring的IOC容器概述 Spring的IOC的过程也被称为依赖注入(DI),那么对象可以通过构造函数参数,工厂方法的参数或在工厂方法构造或返回的对象实例上设置的属性来定义它们的依赖关系,然后 ...
- OpenTSDB-Querying or Reading Data
Querying or Reading Data OpenTSDB offers a number of means to extract data such as CLI tools, an HTT ...
- ThinkPHP中浏览器友好输出函数
// 环境常量 define('IS_CLI', PHP_SAPI == 'cli' ? true : false); define('IS_WIN', strpos(PHP_OS, 'WIN') ! ...
- 六、VueJs 填坑日记之初识*.Vue文件
上一篇博文中,我们将接口的地址通过webpack代理到了本地,解决了跨域的问题.在之前的文章中,我们一直对项目进行配置,并没有真正的切入正题,可能很多人还不明白我们要做什么?那么今天,我们就要开写代码 ...
- 线程&进程&协程
线程 线程是应用程序中工作的最小单元,它被包含在进程之中,是进程中的实际运作单位.一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务.Threading用 ...
- LKD: Chapter 9 An Introduction to Kernel Synchronization
This chapter introduces some conception about kernel synchronization generally. Critical Regions: Co ...
- python学习笔记 list
1.list中的任一元素可以是任一类型.可以是混合的,如,前两个字符串后面的是数字.都是可以的. 2.可以用-1表示最后一个元素. 3.注意不要越界. 4.len(mates) 用来计算list的大小 ...
- JavaFx新手教程-布局-StackPane
cmlanche: 您叫什么名字? StackPane cmlanche: 您好,StackPane君,可以问下您在JavaFX家族中是什么地位? stackpane君: 我可重要了,我是在JavaF ...