首先需要準(zhǔn)備兩個包:commons-io-2.2.jar和commons-fileupload-1.3.3.jar
doPost:
? ??????protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
????????????//判斷上傳的表單是否為multipart/form-data類型
????????????HttpSession session = request.getSession();
????????????User user = (User)session.getAttribute("user"); //在登錄時將User對象放入會話。
????????????if(ServletFileUpload.isMultipartContent(request)) {
????????????????????try{
????????????????????????//1.創(chuàng)建DiskFileItemFactory對象,設(shè)置緩沖區(qū)大小和臨時文件
????????????????????????DiskFileItemFactory factory = new DiskFileItemFactory();
????????????????????????//2.創(chuàng)建ServletFileUpload對象,并設(shè)置上傳文件大小限制
????????????????????????ServletFileUpload sfu = new ServletFileUpload(factory);
????????????????????????sfu.setFileSizeMax(10*1024*1024); //以byte為單位,不能超過10M
? ? ? ? ? ? ? ? ? ? ? ? ?sfu.setHeaderEncoding("utf-8");
????????????????????????????//3.調(diào)用ServletFileUpload.parseRequest方法解析request對象,得到一個保存了所有上傳內(nèi)容的List對象
????????????????????????????@SuppressWarnings("unchecked")
????????????????????????????List<FileItem> fileItemList = sfu.parseRequest(request);
????????????????????????????????Iterator<FileItem> fileItems = fileItemList.iterator();
????????????????????????????//遍歷list,沒迭代一個FileItem對象,調(diào)用其isFormField方法判斷是否上傳文件
????????????????????????????while(fileItems.hasNext()) {
????????????????????????????????????FileItem fileItem = fileItems.next();
????????????????????????????//普通表單元素
????????????????????????????if(fileItem.isFormField()){
????????????????????????????????????String name = fileItem.getFieldName();//name屬性值
????????????????????????????????????String value = fileItem.getString("utf-8");
????????????????????????????????????System.out.println(name + "=" + value);
????????????????????????}else {
????????????????????????????????????String fileName = fileItem.getName();//文件名稱
????????????????????????????????????System.out.println("原文件名:" +fileName);//.jpg
????????????????????????????????????String suffix = fileName.substring(fileName.lastIndexOf('.'));
????????????????????????????????????System.out.println("擴(kuò)展名:" +suffix);
????????????????????????????????????//新文件名(唯一)
????????????????????????????????????String newFileName = new Date().getTime() +suffix;
????????????????????????????????????System.out.println("新文件名:" + newFileName);
????????????????????????????????????//5.調(diào)用FileItem的write()方法寫入文件
????????????????????????????????????File file = new File("E:/workspae1/pets/WebContent/images/" + newFileName);
????????????????????????????????????System.out.println(file.getAbsolutePath());
????????????????????????????????????try {
????????????????????????????????????????fileItem.write(file);
????????????????????????????????????????//6.調(diào)用FileItem的delete()方法,刪除臨時文件
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? fileItem.delete();
????????????????????????????????????????/*
????????????????????????????????????????* 存儲數(shù)據(jù)庫
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? */
????????????????????????????????????????????UserImage userImage = new UserImage();
????????????????????????????????????????????????if(user != null){
????????????????????????????????????????????????String username = user.getUsername();
????????????????????????????????????????????????userImage.updateimage("images/" + newFileName,username);
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? session.setAttribute("image_name", fileName);
????????????????????????????????????????????????session.setAttribute("image_path", newFileName);
}
????????????????????????????????????????????????response.sendRedirect(request.getContextPath()+"/perinfo.jsp");
????????????????????????????????????????????????} catch (Exception e) {
????????????????????????????????????????????????// TODO Auto-generated catch block
????????????????????????????????????????????e.printStackTrace();
????????????????????????????????????????????}
????????????????????????????????????????}
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? }
????????????????????}catch(FileUploadException e){
????????????????e.printStackTrace();
????????????????????????}
}
?userImage.java中有個方法updateimage(String,String)。
我連接數(shù)據(jù)庫的方式是用的mybatis,updateimage(String,String)方法實現(xiàn)了根據(jù)用戶名更改圖片路徑。
html:
<form action="UploadAction" method="post" enctype="multipart/form-data">
<div class="touimg2" id="img"><img src="<%=user.getImage()%>"></div>
<input type="file" id="file1" name="Filename" onchange="selectImage(this)">
<input id="button" type="submit" value="點擊更改" onclick="importly()">
</form>
注意表單中必須加enctype="multipart/form-data"。
以上的方式可以實現(xiàn)圖片上傳到服務(wù)器,路徑到數(shù)據(jù)庫。每次上傳需手動刷新數(shù)據(jù)庫和webContent文件才能夠顯示出來。所以也就成了一個弊端,目前還在找解決辦法。
? ??????