为何我的upload文件夹里面总是空的?
我可以正常添加商品和商品图片,也可以在database里看到添加的文件名和path,但是成功添加后我的Upload文件夹是空的。 多谢帮忙。
这是我的UploadUtil:
package com.imooc.utils;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
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;
/**
* 鏂囦欢涓婁紶鐨勫伐鍏风被
*
*/
public class UploadUtils {
/**
* generate unique filename so that no file gets a same name
*/
public static String getUUIDFileName(String fileName) {
// get part of the filename xx.jpg ---> .jpg
int idx = fileName.lastIndexOf(".");
String extention = fileName.substring(idx);
String uuidFileName = UUID.randomUUID().toString().replace("-", "") + extention;
return uuidFileName;
}
public static Map uploadFile(HttpServletRequest request) throws IOException {
Map<String, String> map = new HashMap<String, String>();
// 1.create a disk file factory
DiskFileItemFactory diskFileItemFactory = new DiskFileItemFactory();
// 2.创建一个核心解析类
ServletFileUpload servletFileUpload = new ServletFileUpload(diskFileItemFactory);
// 3.解析request请求,返回的是list集合,list集合中存放的是FileItem对象
String url = null;
String uuidFileName = null;
try {
List<FileItem> list = servletFileUpload.parseRequest(request);
for (FileItem fileItem : list) {
// 是表单项,但不是文件上传
if (fileItem.isFormField()) {
// 接收表单项参数的值:
String name = fileItem.getFieldName(); // 获得表单项的name属性的值
String value = fileItem.getString("UTF-8");// 获得表单项的值
// 存入集合
map.put(name, value);
// 文件上传项
} else {
// 获得文件上传的名称
String fileName = fileItem.getName();
System.out.println("filename=" + fileName);
if (fileName != null && !"".equals(fileName)) {
// 通过工具类获得唯一文件名:
uuidFileName = UploadUtils.getUUIDFileName(fileName);
// 获得文件上传的数据:
InputStream is = fileItem.getInputStream();
// 获得文件上传的路径:
String path = request.getServletContext().getRealPath("/upload");
// 将输入流对接到输出流就可以了:
url = path + "\\" + uuidFileName;
OutputStream os = new FileOutputStream(url);
int len = 0;
byte[] b = new byte[1024];
while ((len = is.read(b)) != -1) {
os.write(b, 0, len);
}
is.close();
os.close();
map.put("path", request.getContextPath() + "/upload/" + uuidFileName);
map.put("filename", fileName);
}
System.out.println(map);
}
}
} catch (FileUploadException e) {
e.printStackTrace();
}
return map;
}
public static void main(String[] args) {
System.out.println(getUUIDFileName("1.jpg"));
}
}这是我的商品的DAO代码:
package com.imooc.dao.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import com.imooc.dao.ProductDao;
import com.imooc.domain.Product;
import com.imooc.utils.JDBCUtils;
public class ProductDaoImpl implements ProductDao {
@Override
public List<Product> findAll() {
// init
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
List<Product> list = null;
try {
// get conn
conn = JDBCUtils.getConnection();
// write sql
String sql = "SELECT * FROM product p, category c WHERE p.cid = c.cid ORDER BY p.pid DESC";
// preprocess sql
pstmt = conn.prepareStatement(sql);
// execute
rs = pstmt.executeQuery();
// handle result
list = new ArrayList<Product>();
while (rs.next()) {
// encapsulation each result into product
Product product = new Product();
product.setPid(rs.getInt("pid"));
product.setAuthor(rs.getString("author"));
product.setDescription(rs.getString("description"));
product.setFilename(rs.getString("filename"));
product.setPath(rs.getString("path"));
product.setPname(rs.getString("pname"));
product.setPrice(rs.getDouble("price"));
// encapsulation the category to which the product belong
product.getCategory().setCid(rs.getInt("cid"));
product.getCategory().setCname(rs.getString("cname"));
product.getCategory().setCdesc(rs.getString("cdesc"));
// add the product into list
list.add(product);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// release resources
JDBCUtils.release(rs, pstmt, conn);
}
return list;
}
@Override
public void save(Product product) {
// init
Connection conn = null;
PreparedStatement pstmt = null;
try {
// get conn
conn = JDBCUtils.getConnection();
// write sql
String sql = "INSERT INTO product VALUES(null, ?, ?, ?, ?, ?, ?, ?)";
// preprocess sql
pstmt = conn.prepareStatement(sql);
// fill sql
pstmt.setString(1, product.getPname());
pstmt.setString(2, product.getAuthor());
pstmt.setDouble(3, product.getPrice());
pstmt.setString(4, product.getDescription());
pstmt.setString(5, product.getFilename());
pstmt.setString(6, product.getPath());
pstmt.setInt(7, product.getCategory().getCid());
// execute
pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
// release
JDBCUtils.release(pstmt, conn);
}
}
@Override
public Product findOne(Integer pid) {
// init
Connection conn = null;
ResultSet rs = null;
PreparedStatement pstmt = null;
try {
// get conn
conn = JDBCUtils.getConnection();
// write sql
String sql = "SELECT * FROM product p, category c WHERE p.cid = c.cid AND p.pid = ?";
// preprocess sql
pstmt = conn.prepareStatement(sql);
// fill sql params
pstmt.setInt(1, pid);
// execute
rs = pstmt.executeQuery();
// handle result
if (rs.next()) {
// encapsulation
Product product = new Product();
product.setPid(rs.getInt("pid"));
product.setPname(rs.getString("pname"));
product.setAuthor(rs.getString("author"));
product.setPrice(rs.getDouble("price"));
product.setDescription(rs.getString("description"));
product.setFilename(rs.getString("filename"));
product.setPath(rs.getString("path"));
product.getCategory().setCid(rs.getInt("cid"));
product.getCategory().setCname(rs.getString("cname"));
product.getCategory().setCdesc(rs.getString("cdesc"));
return product;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
// release
JDBCUtils.release(rs, pstmt, conn);
}
return null;
}
@Override
public void update(Product product) {
// init
Connection conn = null;
PreparedStatement pstmt = null;
int rs = 0;
try {
// get conn
conn = JDBCUtils.getConnection();
// write sql
String sql = "UPDATE product SET pname = ?, author = ?, price = ?, description = ?, filename = ?, path = ?, cid = ? WHERE pid = ?";
// preprocess sql
pstmt = conn.prepareStatement(sql);
// fill sql
pstmt.setString(1, product.getPname());
pstmt.setString(2, product.getAuthor());
pstmt.setDouble(3, product.getPrice());
pstmt.setString(4, product.getDescription());
pstmt.setString(5, product.getFilename());
pstmt.setString(6, product.getPath());
pstmt.setInt(7, product.getCategory().getCid());
pstmt.setInt(8, product.getPid());
// execute
rs = pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
// release
JDBCUtils.release(pstmt, conn);
}
}
@Override
public void delete(Integer pid) {
// init
Connection conn = null;
PreparedStatement pstmt = null;
try {
// get conn
conn = JDBCUtils.getConnection();
// write sql
String sql = "DELETE FROM product WHERE pid = ?";
// preprocess sql
pstmt = conn.prepareStatement(sql);
// fill sql
pstmt.setInt(1, pid);
// execute
pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
} finally {
// release
JDBCUtils.release(pstmt, conn);
}
}
}这是我的ProductServlet代码:
package com.imooc.web.action;
import java.io.File;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.imooc.domain.Category;
import com.imooc.domain.Product;
import com.imooc.service.CategoryService;
import com.imooc.service.ProductService;
import com.imooc.service.Impl.CategoryServiceImpl;
import com.imooc.service.Impl.ProductServiceImpl;
import com.imooc.utils.UploadUtils;
/**
* Servlet implementation class ProductServlet
*/
@WebServlet("/ProductServlet")
public class ProductServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// get method
String methodName = request.getParameter("method");
if ("findAll".equals(methodName)) {
try {
findAll(request, response);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else if ("saveUI".equals(methodName)) {
try {
saveUI(request, response);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else if ("save".equals(methodName)) {
try {
save(request, response);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else if ("edit".equals(methodName)) {
try {
edit(request, response);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else if ("update".equals(methodName)) {
try {
update(request, response);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else if ("delete".equals(methodName)) {
try {
delete(request, response);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* delete a product on backend
*
* @param request
* @param response
* @throws Exception
*/
private void delete(HttpServletRequest request, HttpServletResponse response) throws Exception {
// get params
Integer pid = Integer.parseInt(request.getParameter("pid"));
// call service
ProductService productService = new ProductServiceImpl();
// find one product(to delete the picture saved)
Product product = productService.findOne(pid);
String path = product.getPath();
if (path != "" && path != null) {
// get the absolute disk path
String realPath = this.getServletContext().getRealPath(path);
System.out.println(realPath);
File file = new File(realPath);
if (file.exists()) {
file.delete();
}
}
productService.delete(pid);
// redirect page
response.sendRedirect(request.getContextPath() + "/ProductServlet?method=findAll");
}
/**
* update a product en backend
*
* @param request
* @param response
* @throws Exception
*/
private void update(HttpServletRequest request, HttpServletResponse response) throws Exception {
// get params
Map<String, String> map = UploadUtils.uploadFile(request);
// encapsulation
Product product = new Product();
product.setPid(Integer.parseInt(map.get("pid")));
product.setPname(map.get("pname"));
product.setAuthor(map.get("author"));
product.setPrice(Double.parseDouble(map.get("price")));
product.setDescription(map.get("description"));
product.setFilename(map.get("filename"));
product.setPath(map.get("path"));
product.getCategory().setCid(Integer.parseInt(map.get("cid")));
// call service
ProductService productService = new ProductServiceImpl();
productService.update(product);
// redirect
response.sendRedirect(request.getContextPath() + "/ProductServlet?method=findAll");
}
/**
* edit product on backend
*
* @param request
* @param response
* @throws Exception
* @throws ServletException
*/
private void edit(HttpServletRequest request, HttpServletResponse response) throws ServletException, Exception {
// get params
Integer pid = Integer.parseInt(request.getParameter("pid"));
// call service to find product in database
ProductService productService = new ProductServiceImpl();
Product product = productService.findOne(pid);
// find all category
CategoryService categoryService = new CategoryServiceImpl();
List<Category> CategoryList = categoryService.findAll();
// set product in request attribute
request.setAttribute("product", product);
request.setAttribute("categoryList", CategoryList);
// redirect request to edit page
request.getRequestDispatcher("/admin/product_update.jsp").forward(request, response);
}
/**
* save adding a product
*
* @param request
* @param response
* @throws Exception
*/
private void save(HttpServletRequest request, HttpServletResponse response) throws Exception {
// upload file
Map<String, String> map = UploadUtils.uploadFile(request);
// encapsule data
Product product = new Product();
product.setPname(map.get("pname"));
product.setAuthor(map.get("author"));
product.setPrice(Double.parseDouble(map.get("price")));
product.setDescription(map.get("description"));
product.setFilename(map.get("filename"));
product.setPath(map.get("path"));
product.getCategory().setCid(Integer.parseInt(map.get("cid")));
// handle into database
ProductService productService = new ProductServiceImpl();
productService.save(product);
// redirect
response.sendRedirect(request.getContextPath() + "/ProductServlet?method=findAll");
}
/**
* redirect to add product page
*
* @param request
* @param response
* @throws Exception
* @throws ServletException
*/
private void saveUI(HttpServletRequest request, HttpServletResponse response) throws ServletException, Exception {
// find out all categories
CategoryService categoryService = new CategoryServiceImpl();
List<Category> list = categoryService.findAll();
// redirect
request.setAttribute("categoryList", list);
request.getRequestDispatcher("/admin/product_add.jsp").forward(request, response);
}
/**
* find all products
*
* @param request
* @param response
* @throws Exception
*/
private void findAll(HttpServletRequest request, HttpServletResponse response) throws Exception {
// call the service
ProductService productService = new ProductServiceImpl();
List<Product> list = productService.findAll();
// redirect
request.setAttribute("list", list);
request.getRequestDispatcher("/admin/product_list.jsp").forward(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}以及我的Produc_add.jsp:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<!-- Mirrored from admindesigns.com/demos/absolute/1.1/admin_forms-validation.html by HTTrack Website Copier/3.x [XR&CO'2014], Thu, 06 Aug 2015 02:56:15 GMT -->
<head>
<!-- Meta, title, CSS, favicons, etc. -->
<meta charset="utf-8">
<title>油画商城--添加商品</title>
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/assets/skin/default_skin/css/theme.css">
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath }/assets/admin-tools/admin-forms/css/admin-forms.css">
<link rel="shortcut icon" href="${pageContext.request.contextPath }/assets/img/favicon.ico">
</head>
<body class="admin-validation-page" data-spy="scroll" data-target="#nav-spy" data-offset="200">
<div id="main">
<%@ include file="header.jsp" %>
<%@ include file="left.jsp" %>
<section id="content_wrapper">
<section id="content" class="table-layout animated fadeIn">
<div class="tray tray-center">
<div class="content-header">
<h2> 添加商品 </h2>
<p class="lead"></p>
</div>
<div class="admin-form theme-primary mw1000 center-block" style="padding-bottom: 175px;">
<div class="panel heading-border">
<!-- 文件上传的要素:
1.表单的提交方式必须是POST;
2.表单中有文件上传项目,必须有name和对应的值;
3.表单的属性enctype属性需要设置为multipart/form-data;
文件上传使用的是apach的fileUpload组件。接受参数不能用getPrameter接受input hidden的参数,但是可以在action里面直接写参数。
-->
<form id="admin-form" name="addForm" action="${pageContext.request.contextPath}/ProductServlet?method=save" method="post" enctype="multipart/form-data">
<div class="panel-body bg-light">
<div class="section-divider mt20 mb40">
<span> 基本信息 </span>
</div>
<div class="section row">
<div class="col-md-2"></div>
<div class="col-md-1">
<label for="sn" class="field prepend-icon">
<label for="sn" class="field-icon">
名称
</label>
</label>
</div>
<div class="col-md-6">
<label for="sn" class="field">
<input name="pname" class="gui-input" placeholder="名称" type="text" value=""/>
</label>
</div>
</div>
<div class="section row">
<div class="col-md-2"></div>
<div class="col-md-1">
<label for="sn" class="field prepend-icon">
<label for="sn" class="field-icon">
价格
</label>
</label>
</div>
<div class="col-md-6">
<label for="sn" class="field">
<input name="price" class="gui-input" placeholder="价格" type="text" value=""/>
</label>
</div>
</div>
<div class="section row">
<div class="col-md-2"></div>
<div class="col-md-1">
<label for="sn" class="field prepend-icon">
<label for="sn" class="field-icon">
作者
</label>
</label>
</div>
<div class="col-md-6">
<label for="sn" class="field">
<input name="author" class="gui-input" placeholder="作者" type="text" value=""/>
</label>
</div>
</div>
<div class="section row">
<div class="col-md-2"></div>
<div class="col-md-1">
<label for="sn" class="field prepend-icon">
<label for="sn" class="field-icon">
分类
</label>
</label>
</div>
<div class="col-md-6">
<label for="sn" class="field select">
<select id="departmentSn" name="cid" class="gui-input" placeholder="分类...">
<c:forEach var="category" items="${categoryList}">
<option value="${category.cid}">${category.cname}</option>
</c:forEach>
</select>
<i class="arrow double"></i>
</label>
</div>
</div>
<div class="section row">
<div class="col-md-2"></div>
<div class="col-md-1">
<label for="sn" class="field prepend-icon">
<label for="sn" class="field-icon">
图片
</label>
</label>
</div>
<div class="col-md-6">
<label for="name" class="field">
<input id="name" name="filename" class="gui-input" type="file" value=""/>
</label>
</div>
</div>
<div class="section row">
<div class="col-md-2"></div>
<div class="col-md-1">
<label for="sn" class="field prepend-icon">
<label for="sn" class="field-icon">
描述
</label>
</label>
</div>
<div class="col-md-6">
<label for="address" class="field">
<input name="description" class="gui-input" placeholder="描述" type="text" value=""/>
</label>
</div>
</div>
<div class="panel-footer text-center">
<button type="submit" class="button"> 保存 </button>
<button type="button" class="button" onclick="javascript:window.history.go(-1);"> 返回 </button>
</div>
</div>
</form>
</div>
</div>
</div>
</section>
</section>
</div>
<style>
/* demo page styles */
body { min-height: 2300px; }
.content-header b,
.admin-form .panel.heading-border:before,
.admin-form .panel .heading-border:before {
transition: all 0.7s ease;
}
/* responsive demo styles */
@media (max-width: 800px) {
.admin-form .panel-body { padding: 18px 12px; }
}
</style>
<style>
.ui-datepicker select.ui-datepicker-month,
.ui-datepicker select.ui-datepicker-year {
width: 48%;
margin-top: 0;
margin-bottom: 0;
line-height: 25px;
text-indent: 3px;
color: #888;
border-color: #DDD;
background-color: #FDFDFD;
-webkit-appearance: none; /*Optionally disable dropdown arrow*/
}
</style>
<script src="vendor/jquery/jquery-1.11.1.min.js"></script>
<script src="vendor/jquery/jquery_ui/jquery-ui.min.js"></script>
<script src="assets/admin-tools/admin-forms/js/jquery.validate.min.js"></script>
<script src="assets/admin-tools/admin-forms/js/additional-methods.min.js"></script>
<script src="assets/admin-tools/admin-forms/js/jquery-ui-datepicker.min.js"></script>
<script src="assets/js/utility/utility.js"></script>
<script src="assets/js/demo/demo.js"></script>
<script src="assets/js/main.js"></script>
<script type="text/javascript" src="js/pages.js"></script>
<script type="text/javascript" src="js/items.js"></script>
</body>
</html>4
收起
正在回答 回答被采纳积分+1
1回答
3. Java 数据库开发与实战应用
- 参与学习 人
- 提交作业 357 份
- 解答问题 8016 个
本阶段将带你学习MySQL数据库,JDBC接口,MyBatis框架等,带你掌握的数据的存放和管理。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星