SpringMVC國際化與文件上傳

1.對頁面進行國際化

1)首先我們對Spring配置文件中添加國際化bean配置


<bean> class="org.springframework.context.support.ResourceBundleMessageSource">
<property>
/<bean>

<bean> class="org.springframework.web.servlet.i18n.SessionLocaleResolver">/<bean>

<interceptors>
<bean>
/<interceptors>

2)然後添加我們的資源文件,這個資源文件的前綴要與我們上面配置的bean的value相同。

SpringMVC國際化與文件上傳

我們在資源文件寫入我們需要國際化的內容

SpringMVC國際化與文件上傳

然後我們在跳轉頁面的時候需要加載國際化資源

@RequestMapping(value="login",method=RequestMethod.GET)
public String login(Locale locale,Map<string> map){
String name = messageSource.getMessage("name", null, locale);
String pass = messageSource.getMessage("pass", null, locale);
String title = messageSource.getMessage("title", null, locale);
String submit = messageSource.getMessage("submit", null, locale);
map.put("title", title);
map.put("pass", pass);
map.put("name", name);
map.put("submit", submit);
map.put("user", new User());
return "login";
}
/<string>

我們在頁面中可以使用jstl或者spring標籤數據國際化信息,spring中的form標籤是用來輸入spring驗證錯誤之後的提示信息(上章有提過)




然後我們頁面中的國際化信息可以可這顯示出來


我們還可以完成一個語言切換功能,我們在頁面上加入兩個超鏈接,當接收到請求,SpringMVC會在上下文中查找一個本地解析器,找到後使用它獲取請求所對應的本地化類型信息,SpringMVC還允許還允許裝配一個動態更改本地化類型的攔截器,這樣通過指定一個請求參數就可以控制單個請求的本地化類型。



SpringMVC接到請求後首先會判斷有沒有這個參數,如果有這個參數就添加到session裡面,如果沒這個參數會到session裡面去找,session裡面沒有找到會默認讀取瀏覽器的語言。

2.文件上傳

SpringMVC的文件上傳非常的簡單,它直接提供了直接的支持,這種支持是通過即插即用的MultipartResolver接口實現的。Spring用它的實現類CommonsMultipartResolver來實現。SpringMVC上下文中沒有自動裝配所以需要我們手動來配置。我們這裡就直接實現一個多文件上傳,多文件上傳會了害怕單文件上傳不會?

配置之前我們首先來導入文件上傳的jar包,這些包在我們spring中是沒有的。

SpringMVC國際化與文件上傳

然後我們手動配置下Bean


<bean> class="org.springframework.web.multipart.commons.CommonsMultipartResolver">

<property>

<property>
/<bean>

這個bean裡還可以設置類型啊什麼什麼的,有需要的可以閱讀源碼。


enctype="multipart/form-data" 注意文件上傳必須加上這個,而且必須是post請求。

然後我們來看下我們服務器是怎麼接收到文件的,多文件上傳使用 MultipartFile[] 並且一定要在參數前加上註解 @RequestParam("file")否則會報錯。單文件上傳我們只需要使用一個MultipartFile對象,並且無需加註解。

/**
* 單文件上傳 : MultipartFile file
* 多文件上傳 : @RequestParam("file") MultipartFile[] file
* 多文件上傳必須加上 @RequestParam("file")註解否則會報錯

* @author:MiYa.
* @time:2018-9-28 11:50
*/
@RequestMapping(value="upload",method=RequestMethod.POST)
public String testFileUpload(HttpServletRequest request , @RequestParam("file") MultipartFile[] file){
for (int i = 0; i < file.length; i++) {
MultipartFile multipartFile = file[i];
System.out.println(" ContentType: " + multipartFile.getContentType());
System.out.println(" Name: " + multipartFile.getName());
System.out.println(" OriginalFilename: " + multipartFile.getOriginalFilename());
System.out.println(" Size: " + multipartFile.getSize());
//判斷是否提交文件,如果沒有那麼跳過上傳
if(multipartFile.isEmpty()){
continue;
}
// 獲取文件的上傳路徑
String uploadpath = request.getServletContext().getRealPath("uploads");
//獲取文件名稱
String filename = multipartFile.getOriginalFilename();
//截取文件後綴
String fileext = filename.substring(filename.lastIndexOf("."));
//生成新的隨機文件名稱
String newfileName = UUID.randomUUID() + fileext;
//文件保存路徑
File savepath = new File(uploadpath + "/" + newfileName);
//上傳文件
try {
multipartFile.transferTo(savepath);
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
return "welcome";
}

整理下MultipartFile經常使用的方法:

isEmpty():判斷是否提交文件上來

getContextType():獲取文件類型

getName():獲取表單元素名稱

getOriginalFilename():獲取文件名

getSize():獲取文件大小

getBytes():獲取字節數組


分享到:


相關文章: