上傳圖片到服務(wù)器并將圖片路徑保存到數(shù)據(jù)庫

首先需要準(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文件才能夠顯示出來。所以也就成了一個弊端,目前還在找解決辦法。


? ??????

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,645評論 18 399
  • 為詩而生 雨桐 云,為藍(lán)天而生 樹,為山巒而生 花,為流水而生 我,為詩歌而生
    十二雨桐閱讀 327評論 0 0
  • 向晚不晚閱讀 442評論 0 0

友情鏈接更多精彩內(nèi)容