1.前期的準備工作
圖片上傳狞悲,我們需要先來了解一下文件的上傳。
以jsp文件與servlet作為客戶端服務器端進行上傳下載為例回右。
客戶端頁面(jsp文件)需要設置
1.表單的method=post
2.設置enctype=multipart/form-date
3.使用具有name屬s性的file元素
服務器端(需要借助第三方jar包:commons-fileupload-1.2.2.jar,commons-io-2.2.jar)
1.創(chuàng)建DiskFileItemFactory
DiskFileItemFactory factory = new DiskFileItemFactory();
2.創(chuàng)建ServletFileUpload
ServletFileUpload upload = new ServletFileUpload(factory);
3.通過ServletFileUpload的parseRequest方法得到所有的FileItem
Listlist = upload.parseRequest(request);
2.開始執(zhí)行上傳操作
for(FileItem item:list){
//需要先判斷一下是文件(file)還是表單信息
if (!item.isFormField()) {
//暫時用時間節(jié)點來保證存儲的路徑的唯一性
String path = this.getServletContext().getRealPath("\\upload");
Date date = new Date();
SimpleDateFormat format = new SimpleDateFormat("/yyyy/MM/dd/HH/mm/ss/");
File file = new File(path+format.format(date));
//判斷文件是否存在 不存在就創(chuàng)建
if (!file.exists()) {
file.mkdirs();
}
File file2 = new File(file.getPath(), item.getName());
FileOutputStream fos = new FileOutputStream(file2);
IOUtils.copy(item.getInputStream(), fos);
fos.close();
}
上傳的文件在Tomcat路徑下
D:\tool\Tomcat\apache-tomcat-6\apache-tomcat-6.0.44\webapps\Upload\upload
這是單文件上傳,通過實踐節(jié)點來保證唯一性
因為相同的文件中捆,上傳之后會覆蓋之前的。所以我們一定要保證上傳文件的唯一性
我們還可以通過在服務器端隨機生成UUID號+文件名來生成新的唯一的文件名
//系統(tǒng)給定的隨機的id號---唯一id
UUID uuid = UUID.randomUUID();
String fileName = uuid + "_"+item.getName();
System.out.println("filename:"+fileName);
File file = new File(parentFile, fileName);
3.文件上傳
Mapmap = new HashMap<>();
if(item.isFormField()){
String key = item.getFieldName();
if(map.get(key)==null){
map.put(item.getFieldName(), item.getString("utf-8"));
}else{
//復選框值的處理
map.put(key, map.get(key)+","+item.getString("utf-8"));
}
}
這里我們用的是一個集合Map來接收坊饶,通過BeanUtils.populate(user, map);? //將map當成User屬性的方式放入到User對象中泄伪。(用到了上面第一個jar包)
4.多圖片上傳
我們需要創(chuàng)建一個對象來接收。
由于我們之前已經(jīng)做了圖片的唯一性操作匿级,所以可以盡情的上傳圖片蟋滴,接收的時候用一個隊象的List<String>urlList來接收.由于我們之前用的是遍歷for(FileItem item:list),所以我們可以把每次遍歷的用list來保存。然后也可以轉發(fā)給前端
user.getListUrls().add("upload"+File.separator+datePath+File.separator+item.getName());
request.setAttribute("listUrls", user.getListUrls());
request.getRequestDispatcher("showImage.jsp").forward(request, response);