web檔案上傳

來源:互聯網
上載者:User

標籤:lib   led   uid   zemax   儲存   print   format   utf-8   form   

檔案上傳的步驟:

1.目前Java檔案上傳功能都是依靠Apache組織的commons-io,
 fileupload兩個包來實現的;

 2. http://commons.apache.org/下載io,fileupload包
 添加到項目中的WEB-INF/lib檔案夾下;

 3.檔案上傳的時候檔案一般是存在伺服器的upload目錄下,檔案名稱
 儲存在資料庫中,為了防止上傳的檔案同名,我們需要動態
 修改上傳檔案的名稱。
 
 4.必須設計form表單類型為(請求方式為:post請求,添加屬性enctype = multipart/form-data),這樣這個form
 才能夠支援檔案上傳

5.以下是具體項目的一個Servlet類,目的:把檔案上傳同增添功能同時進行

具體代碼如下:

 package com.jinzhi.web;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.UUID;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

 

import com.jinzhi.bean.Book;
import com.jinzhi.bean.BookType;
import com.jinzhi.dao.BookDao;
import com.jinzhi.dao.BookTypeDao;

public class BookSave extends HttpServlet {

 
 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  request.setCharacterEncoding("utf-8");
  response.setContentType("text/html;charset=utf-8");
  BookTypeDao booktypeDao = new BookTypeDao();
  List<BookType> lst = booktypeDao.findAll();
  request.setAttribute("lstBookType", lst);
  request.getRequestDispatcher("book_save.jsp").forward(request, response);
 }

 
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

//佈建要求的編碼格式  

request.setCharacterEncoding("utf-8");

//設定響應的編碼格式
  response.setContentType("text/html;charset=utf-8");
  PrintWriter out = response.getWriter();
  //備以封裝從FileItem集合中取出的頁面元素的資料
  Book book = new Book();
  //為了轉換從fileItem集合中取出的日期的格式
  DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
  //得到檔案上傳的目錄(存到本地磁碟)
  String savePath = request.getSession().getServletContext().getRealPath("/upload");
  //建立本地磁碟檔案工廠
  DiskFileItemFactory factory = new DiskFileItemFactory();
  //建立檔案上傳解析器
  ServletFileUpload sf = new ServletFileUpload(factory);
  //設定解析器的大小(一次可以解析多少檔案)
  sf.setFileSizeMax(1024*1024);
  //現在所有表單元素都要通過解析器解析,所以要設定解析的編碼格式
  sf.setHeaderEncoding("utf-8");
  String fileName = "";//檔案名稱
  
  //將得到前台所有的form表單元素,從request對象得到所有的表單元素對象
  try {
   //fileItem代表完整的input對象,而不是其他的東西(例如value值)
   List<FileItem> list = sf.parseRequest(request);
   //迴圈前台得到的input對象資料,判斷是一般表單資料還是上傳檔案類型資料
   for (FileItem fileItem : list) {
    
    if(fileItem.isFormField()) {
     //判斷為普通的表單資料
     //System.out.println(fileItem.getFieldName() + fileItem.getName());
     //bookName為前台頁面input元素起的name值
     if("bookName".equals(fileItem.getFieldName())) {
      //加參數的String設定得到的值的編碼格式
      book.setBookName(fileItem.getString("utf-8"));
     }
     if("author".equals(fileItem.getFieldName())) {
      book.setAuthor(fileItem.getString("utf-8"));
     }
     if("pbName".equals(fileItem.getFieldName())) {
      book.setPbName((fileItem.getString("utf-8")));
     }
     
     if("context".equals(fileItem.getFieldName())) {
      book.setContext((fileItem.getString("utf-8")));
     }
     if("price".equals(fileItem.getFieldName())) {
      book.setPrice(Double.parseDouble(fileItem.getString("utf-8")));
     }
     if("hyprice".equals(fileItem.getFieldName())) {
      book.setHyprice(Double.parseDouble(fileItem.getString("utf-8")));
     }
     //int類型
     if("booktypeId".equals(fileItem.getFieldName())) {
      book.setBooktypeId(Integer.parseInt(fileItem.getString("utf-8")));
     }
     if("bookstate".equals(fileItem.getFieldName())) {
      book.setBookStates(Integer.parseInt(fileItem.getString("utf-8")));
     }
     if("num".equals(fileItem.getFieldName())) {
      book.setNum(Integer.parseInt(fileItem.getString("utf-8")));
     }
     
     if("pbDate".equals(fileItem.getFieldName())) {
      //由格式化後的日期格式解析為格式化前的格式
      book.setPbdate(df.parse(fileItem.getString("utf-8")));
     }
     if("sjDate".equals(fileItem.getFieldName())) {
      //由格式化後的日期格式解析為格式化前的格式
      book.setSjdate(df.parse(fileItem.getString("utf-8")));
     }  
    } else {
     //判斷為檔案類型
     System.out.println(fileItem.getFieldName() + fileItem.getName());
     //得到檔案名稱
     String filename = fileItem.getName();
     //因為防止兩次上傳檔案的名稱相同,而導致覆蓋舊檔案,所以要修改名稱,新檔案名稱
        //這裡是新加的檔案首碼(產生的隨機數,拼成的檔案首碼)   //這裡是舊檔案的尾碼
     fileName = UUID.randomUUID().toString() + filename.substring(filename.lastIndexOf("."));
     //構建檔案
     File file = new File(savePath + "/" + fileName);
     //寫入內容
     fileItem.write(file);
     book.setBigImg(fileName);
    }
    
   }
  } catch (FileUploadException e1) {
   // TODO Auto-generated catch block
   e1.printStackTrace();
  } catch (ParseException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }

//調用DAO存入資料庫
  new BookDao().save(book);
  response.sendRedirect("BookList");
    
  out.flush();
  out.close();
 }

}

web檔案上傳

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.