天天看點

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,如需轉載請自行聯系原作者