使用webuploader上傳文件,還要提交文件對應的屬性。
思路:使用webuploader選擇文件,上傳文件,利用response獲取到上傳成功后,服務器端返回的關于文件的訪問地址,名稱等其他屬性,利用response._raw,獲取到原始數據,或者在服務器端將數據添加到json中,返回的數據就是json數據;
返回的數據,添加到表單的隱藏input中,最后提交表單,在服務器端利用request獲取到提交的參數,request.getparameter(key),對于多個同名的input,會自動組成一個數組,通過遍歷數組,將數據重新組合設置到對象中,存入到數據庫中。
這種思路,必須是先上傳文件,后提交表單,上傳成功返回數據信息,再結合表單提交。
如果是在表單中提交思路就不一樣了。
這里應該有一個默認的知識點,就是表單提交的時候,如果有多條同名的輸入數據,會自動組成一個字符串數組,且是按順序組裝的。再使用request提取的時候,將字符串分割為數組,順序提取就能對應上。
刪除沒有使用的圖片:
一、上傳了,但是沒有和相關數據保存,稱為了無用數據
? 考慮,上傳圖片先保存到臨時文件夾,保存數據后,將關聯的數據復制到新的目錄中。
二、已經關聯的數據,不再使用了
此時,數據已經復制到了最終的目錄中,在刪除相關的對象和屬性的時候,同時刪除磁盤中的數據。
三、復制文件問題
參考http://blog.csdn.net/yqs_love/article/details/51959776
問題描述:在項目中創(chuàng)建了兩個目錄,一個用于存放每次上傳的圖片,另一個存放最終與對象關聯的圖片,本人已經在項目中新建了各級目錄。
使用代碼
/**
* 使用文件通道的方式復制文件
*
* @param s
*? ? ? ? ? ? 源文件
* @param t
*? ? ? ? ? ? 復制到的新文件
*/
public static String fileChannelCopy(File sourceFile, File desinationFile) {
String msg = "0";
FileInputStream fi = null;
FileOutputStream fo = null;
FileChannel in = null;
FileChannel out = null;
try {
fi = new FileInputStream(sourceFile);
if(!desinationFile.exists()){
desinationFile.getParentFile().mkdir();
desinationFile.createNewFile();
}
fo = new FileOutputStream(desinationFile);
in = fi.getChannel();//得到對應的文件通道
out = fo.getChannel();//得到對應的文件通道
in.transferTo(0, in.size(), out);//連接兩個通道,并且從in通道讀取,然后寫入out通道
msg="1";
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
fi.close();
in.close();
fo.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return msg;
}
初始沒有刪除線的代碼,后查看參考文獻后,添加了代碼。
if(!desinationFile.exists()){
desinationFile.mkdir();
desinationFile.createNewFile();
}
但是項目依舊存在問題,createNewFile()拋出異常。
后更改
if(!desinationFile.exists()){
desinationFile.getParentFile().mkdir();
desinationFile.createNewFile();
}
不再拋出異常,而且新建了最底層的目錄和手動在eclipse項目中創(chuàng)建的目錄名一樣。