後臺管理——圖片上傳
項目中用到了上傳圖片,但是相比於之前做過的上傳圖片還有所不同,這次上傳的個數的不定的,所以,後臺的處理需要做到很細緻的處理。
一、上傳頁面設置
在頁面通過form提交數據的時候一定要注意,在form裏有一個屬性是enctype這個屬性用來規定在發送到服務器之前應該如何對錶單數據進行編碼。默認地,表單數據會編碼爲 "application/x-www-form-urlencoded"。就是說,在發送到服務器之前,所有字符都會進行編碼(空格轉換爲 "+" 加號,特殊符號轉換爲 ASCII HEX 值)。
multipart/form-data不對字符編碼,在使用包含文件上傳控件的表單時,必須使用該值。在這次的開發的過程中又多次的忘記寫這個屬性造成了,struts2報錯找不到相應的頁面。
text/plain空格轉換爲 "+" 加號,但不對特殊字符編碼。
二、後臺處理
List <String>listFileName = new ArrayList(30);//存儲新命名的文件名
listcpyc = new ArrayList<XbConCpyc>();
String targetDirectory = ServletActionContext.getServletContext().getRealPath("/img/cpyc");//設置文件上傳存儲的路徑
//獲取日期,用日期來命名文件。
Date now = new Date();
Long tim = now.getTime();
Timestamp nowtime = new Timestamp(tim);
String nowdate = nowtime.toString();
nowdate = nowdate.substring(2, 20).replaceAll("-", "").replaceAll(" ","").replaceAll(":", "").replace(".", "");
if(upload!=null){//驗證上傳的文件List是否爲空
for (int i = 0; i < upload.size(); i++) {
if(upload.get(i)!=null){
String filename= nowdate+i+".jpg";//對圖片重命名,全部轉換爲.jpg格式的圖片
File target = new File(targetDirectory, filename);
try {
FileUtils.copyFile(upload.get(i), target);
} catch (IOException e) {
e.printStackTrace();
}
listFileName.add(filename);
}
else{//爲List中空對象文件名,特殊處理,在下民更新數據庫的時候作爲判斷依據
listFileName.add("1");
}
}
}
上傳文件的struts實現了功能,我們只要調用它的方法就可以了,
① FileUtils.copyFile(upload.get(i), target),upload爲上傳的文件,target是我們自己聲明的文件,用來存儲上傳的文件。
② Upload 在action中命名的變量名要與頁面上<input type=”file” name=”upload”>的name一樣,否則action中的get、set方法得不到值。
③ 這次上傳圖片的時候無論上傳的圖片爲什麼格式,都硬性的轉換爲.jpg格式, 當在上傳其他格式文件的時候一定要注意。