天天看点

JAVA入门[16]-form表单,上传文件

<code>@RequestMapping</code><code>(</code><code>"/detail"</code><code>)</code>

<code>public</code> <code>String detail(</code><code>@RequestParam</code><code>(</code><code>"id"</code><code>) </code><code>int</code> <code>id,Model model){</code>

<code>    </code><code>Category category=</code><code>new</code> <code>Category();</code>

<code>    </code><code>category.setCateId(id);</code>

<code>    </code><code>category.setCateName(</code><code>"测试分类"</code><code>+id);</code>

<code>    </code><code>model.addAttribute(</code><code>"cate"</code><code>,category);</code>

<code>    </code><code>return</code> <code>"detail.html"</code><code>;</code>

<code>}</code>

  

<code>@RequestMapping</code><code>(value = </code><code>"/edit/{id}"</code><code>,method = RequestMethod.GET)</code>

<code>public</code> <code>String edit(</code><code>@PathVariable</code><code>(</code><code>"id"</code><code>) </code><code>int</code> <code>id,Model model) {</code>

<code>    </code><code>//todo:get category from db</code>

<code>    </code><code>return</code> <code>"edit.html"</code><code>;</code>

1.首先定义实体类。

<code>public</code> <code>class</code> <code>Category{</code>

<code>    </code><code>public</code> <code>Category(){}</code>

<code>    </code><code>@NotNull</code>

<code>    </code><code>@Min</code><code>(</code><code>1</code><code>)</code>

<code>    </code><code>private</code> <code>int</code> <code>cateId;</code>

<code>    </code><code>private</code> <code>String cateName;</code>

<code>    </code><code>public</code> <code>int</code> <code>getCateId() {</code>

<code>        </code><code>return</code> <code>cateId;</code>

<code>    </code><code>}</code>

<code>    </code><code>public</code> <code>void</code> <code>setCateId(</code><code>int</code> <code>cateId) {</code>

<code>        </code><code>this</code><code>.cateId = cateId;</code>

<code>    </code><code>public</code> <code>String getCateName() {</code>

<code>        </code><code>return</code> <code>cateName;</code>

<code>    </code><code>public</code> <code>void</code> <code>setCateName(String cateName) {</code>

<code>        </code><code>this</code><code>.cateName = cateName;</code>

2.表单edit.html

<code>&lt;form method=</code><code>"post"</code> <code>th:object=</code><code>"${cate}"</code> <code>th:action=</code><code>"@{/category/save}"</code> <code>enctype=</code><code>"multipart/form-data"</code><code>&gt;</code>

<code>        </code><code>&lt;table&gt;</code>

<code>            </code><code>&lt;tr&gt;</code>

<code>                </code><code>&lt;td&gt;id:&lt;/td&gt;</code>

<code>                </code><code>&lt;td&gt;&lt;input type=</code><code>"text"</code> <code>th:field=</code><code>"*{cateId}"</code><code>&gt;&lt;/td&gt;</code>

<code>            </code><code>&lt;/tr&gt;</code>

<code>                </code><code>&lt;td&gt;name:&lt;/td&gt;</code>

<code>                </code><code>&lt;td&gt;&lt;input type=</code><code>"text"</code> <code>th:field=</code><code>"*{cateName}"</code><code>&gt;&lt;/td&gt;</code>

<code>            </code><code>&lt;/tr&gt;        </code>

<code>                </code><code>&lt;td colspan=</code><code>"2"</code><code>&gt;</code>

<code>                    </code><code>&lt;input type=</code><code>"submit"</code> <code>value=</code><code>"提交"</code><code>&gt;</code>

<code>                </code><code>&lt;/td&gt;</code>

<code>        </code><code>&lt;/table&gt;</code>

<code>    </code><code>&lt;/form&gt;</code>

3.通过给action方法的参数添加@Valid注解,这会告知Spring,需要确保这个对象满足校验限制

<code>@RequestMapping</code><code>(value = </code><code>"/save"</code><code>,method = RequestMethod.POST)</code>

<code>public</code> <code>String save( </code><code>@Valid</code> <code>Category category, Errors errors) </code><code>throws</code> <code>IOException {...}</code>

错误可以通过Errors对象进行访问,现在这个对象已作为processRegistration()方法的参数。(很重要一点需要注意,Errors参数要紧跟在带有@Valid注解的参数后面,@Valid注解所标注的就是要检验的参数。

1.设置web.xml配置

web.xml配置multipart-config

<code>&lt;servlet&gt;</code>

<code>        </code><code>&lt;servlet-name&gt;springmvc&lt;/servlet-name&gt;</code>

<code>        </code><code>&lt;servlet-</code><code>class</code><code>&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-</code><code>class</code><code>&gt;</code>

<code>        </code><code>&lt;load-on-startup&gt;</code><code>1</code><code>&lt;/load-on-startup&gt;</code>

<code>        </code><code>&lt;multipart-config&gt;</code>

<code>            </code><code>&lt;location&gt;&lt;/location&gt;</code>

<code>            </code><code>&lt;max-file-size&gt;</code><code>2097152</code><code>&lt;/max-file-size&gt;</code>

<code>            </code><code>&lt;max-request-size&gt;</code><code>4194304</code><code>&lt;/max-request-size&gt;</code>

<code>        </code><code>&lt;/multipart-config&gt;</code>

<code>    </code><code>&lt;/servlet&gt;</code>

2.from表单

form要将enctype属性设置为multipart/form-data,这就告诉浏览器以multipart数据的形式提交表单

input标签要把type设置为file,这能够让用户选择要上传的图片文件。accept属性用来将文件类型限制为JPEG、PNG以及GIF图片。根据其name属性,图片数据将会发送到multipart请求中的profilePicture part之中

<code>                </code><code>&lt;td&gt;file:&lt;/td&gt;</code>

<code>                </code><code>&lt;td&gt;</code>

<code>                    </code><code>&lt;input type=</code><code>"file"</code> <code>accept=</code><code>"image/jpeg,image/png,image/jpg"</code> <code>name=</code><code>"picture"</code><code>&gt;</code>

3.controller:

@RequestPart :图片对应的参数要添加该注解

spring提供了Multipart MultipartFile对象,它为处理multipart数据提供了内容更为丰富的对象

transferTo() ,它能够帮助我们将上传的文件写入到文件系统中

<code>    </code><code>public</code> <code>String save(</code><code>@RequestPart</code><code>(</code><code>"picture"</code><code>) MultipartFile picture, </code><code>@Valid</code> <code>Category category, Errors errors) </code><code>throws</code> <code>IOException {</code>

<code>        </code><code>//todo:save file to image server</code>

<code>        </code><code>String filepath=request.getRealPath(</code><code>"/"</code><code>)+</code><code>"upload/"</code><code>+picture.getOriginalFilename();</code>

<code>        </code><code>picture.transferTo(</code><code>new</code> <code>File(filepath));</code>

<code>        </code><code>if</code><code>(errors.hasErrors()){</code>

<code>            </code><code>return</code> <code>"edit.html"</code><code>;</code>

<code>        </code><code>}</code>

<code>        </code><code>//todo:save category to db</code>

<code>        </code><code>return</code> <code>"redirect:/category/detail?id="</code><code>+category.getCateId();</code>

    本文转自 陈敬(Cathy) 博客园博客,原文链接:http://www.cnblogs.com/janes/p/6933723.html,如需转载请自行联系原作者