JSP文件
必须 包括 enctype="multipart/form-data" method="post" type="file" 缺一不可。
<h1>添加图书</h1><br>
<form action="bookAdd"enctype="multipart/form-data" method="post">
<div class="form-group">
<label>图书名称:</label>
<input type="text" class="form-control" name="name" />
</div>
<div class="form-group">
<label>图书图片</label>
<input type="file" class="img-responsive" name="img">
</div>
<div class="form-group">
<label>图书作者:</label>
<input type="text" class="form-control" name="author" />
</div>
<div class="form-group">
<label>出版社:</label>
<input type="text" class="form-control" name="publish" />
</div>
<div class="form-group">
<label>价格:</label>
<input type="text" class="form-control" name="price" />
</div>
<div class="form-group">
<input type="submit" class="btn btn-info" value="提交" />
</div>
</form>
Servlet文件 由于enctype="multipart/form-data" 因此 String name = request.getParameter("name")是获取不到值的。(在jsp+servlet模式下这样,在springMVC下是可以获取到name值的)
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Book book = new Book();
HashMap<String, String> map = new HashMap<String, String>();
String realPath = getServletContext().getRealPath("/upload");
File file = new File(realPath);
if (!file.exists()){
file.mkdir();
}
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
servletFileUpload.setHeaderEncoding("UTF-8");
try {
List<FileItem> fileItems = null;
fileItems = servletFileUpload.parseRequest(request);
for (FileItem fileItem : fileItems) {
if (fileItem.isFormField()){
//普通表单内容
String fieldName = fileItem.getFieldName();
String value = fileItem.getString("UTF-8");
map.put(fieldName,value);
}
else{
String imgName = fileItem.getName();
if (imgName==null||"".equals(imgName)){
continue;
}else {
book.setImg(imgName);
InputStream is = fileItem.getInputStream();
FileOutputStream fos = new FileOutputStream(realPath+File.separator+imgName);
byte[] bytes =new byte[1024];
int len;
while ((len=is.read(bytes))!=-1){
fos.write(bytes,0,len);
fos.flush();
}
fos.close();
is.close();
}
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
book.setName(map.get("name"));
book.setAuthor(map.get("author"));
book.setPublish(map.get("publish"));
book.setPrice(Double.parseDouble(map.get("price")));
System.out.println(book);
BookDao bookDao = new BookDaoImpl();
boolean b = bookDao.bookAdd(book);
if (b==true){
response.sendRedirect("HomeServlet");
}
}
在有多个表单内容时 将属性名和存入到Map表中 是最好的方法