package com.coffee.web.controller;
import java.io.*;
import java.sql.SQLException;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import com.coffee.service.IItemService;
import com.coffee.service.impl.ItemServiceImpl;
/**
* @ClassName: UploadHandleServlet
* @Description: 用于上传商品图片,并将URL传入数据库中
*
* @author: K
*/
@WebServlet(name = "UploadItemImageServlet", urlPatterns = "/servlet/uploadItemImageServlet")
public class UploadItemImageServlet extends HttpServlet {
private IItemService itemService = new ItemServiceImpl();
@Override
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("------------UploadItemImageServlet work start-----------");
//上传图片,同时更新数据库中图片的url
try {
uploadImage(request, response);
} catch (SQLException e) {
throw new RuntimeException(e);
}
//回显
request.getRequestDispatcher("/pages/admin/manage-items.jsp").forward(request, response);
System.out.println("------------UploadItemImageServlet work finished-----------");
}
private void uploadImage(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException, SQLException {
//获取实际的保存地址
String savePath = this.getServletContext().getRealPath("/images/item");
File savePathFile = new File(savePath);
if (!savePathFile.exists()) {
savePathFile.mkdir();
}
// 上传时生成的临时文件保存目录
String tempPath = this.getServletContext().getRealPath("/WEB-INF/temp");
File tmpFile = new File(tempPath);
if (!tmpFile.exists()) {
tmpFile.mkdir();
}
int itemId = 0;
String imageUrl = "";
try {
// 使用Apache文件上传组件处理文件上传步骤:
// 1、创建一个DiskFileItemFactory工厂
DiskFileItemFactory factory = new DiskFileItemFactory();
// 设置工厂的缓冲区的大小,当上传的文件大小超过缓冲区的大小时,就会生成一个临时文件存放到指定的临时目录当中。
factory.setSizeThreshold(1024 * 100);// 设置缓冲区的大小为100KB,如果不指定,那么缓冲区的大小默认是10KB
// 设置上传时生成的临时文件的保存目录
factory.setRepository(tmpFile);
// 2、创建一个文件上传解析器
ServletFileUpload upload = new ServletFileUpload(factory);
// 监听文件上传进度
upload.setProgressListener(new ProgressListener() {
public void update(long pBytesRead, long pContentLength, int arg2) {
System.out.println("文件大小为:" + pContentLength + ",当前已处理:" + pBytesRead);
}
});
// 解决上传文件名的中文乱码
upload.setHeaderEncoding("UTF-8");
// 3、判断提交上来的数据是否是上传表单的数据
if (!ServletFileUpload.isMultipartContent(request)) {
// 按照传统方式获取数据
return;
}
upload.setFileSizeMax(1024 * 1024);// 设置上传单个文件的大小的最大值=10MB
upload.setSizeMax(1024 * 1024 * 50); // 设置上传文件总量的最大值=50MB
// 4、使用ServletFileUpload解析器解析上传数据,解析结果返回的是一个List<FileItem>集合,每一个FileItem对应一个Form表单的输入项
List<FileItem> list = upload.parseRequest(request);
for (FileItem item : list) {
// 如果fileitem中封装的是普通输入项的数据
if (item.isFormField()) {
String name = item.getFieldName();
// 解决普通输入项的数据的中文乱码问题
String value = item.getString("UTF-8");
System.out.println(name + "=" + value);
if (name.equals("itemId")) {
itemId = Integer.parseInt(value);
}
} else {// 如果fileitem中封装的是上传文件
// 得到上传的文件名称,
String filename = item.getName();
System.out.println(filename);
if (filename == null || filename.trim().equals("")) {
continue;
}
// 注意:不同的浏览器提交的文件名是不一样的,有些浏览器提交上来的文件名是带有路径的,如: c:\a\b\1.txt,而有些只是单纯的文件名,如:1.txt
// 处理获取到的上传文件的文件名的路径部分,只保留文件名部分
filename = filename.substring(filename.lastIndexOf("\\") + 1);
// 得到上传文件的扩展名
String fileExtName = filename.substring(filename.lastIndexOf(".") + 1);
if (isImage(fileExtName) == false) {
throw new RuntimeException("不能上传除jpg/png/bmp以外的图片文件!!");
}
// 获取item中的上传文件的输入流
InputStream in = item.getInputStream();
// 创建一个文件输出流
FileOutputStream out = new FileOutputStream(savePath + "\\" + filename);
imageUrl = "/images/item" + "/" + filename;
// 创建一个缓冲区
byte buffer[] = new byte[1024];
// 判断输入流中的数据是否已经读完的标识
int len = 0;
// 循环将输入流读入到缓冲区当中,(len=in.read(buffer))>0就表示in里面还有数据
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
// 关闭输入流
in.close();
// 关闭输出流
out.close();
// 删除处理文件上传时生成的临时文件
item.delete();
}
}
} catch (FileUploadBase.FileSizeLimitExceededException e) {
request.setAttribute("operateError", "单个文件超出最大值!!!");
return;
} catch (FileUploadBase.SizeLimitExceededException e) {
request.setAttribute("operateError", "上传文件的总的大小超出限制的最大值!!!");
return;
} catch (Exception e) {
request.setAttribute("operateError", "文件上传失败!!!");
return;
}
request.setAttribute("operateSuccess", "添加图片成功!!");
System.out.println("itemId:" + itemId);
System.out.println(imageUrl);
itemService.update(itemId, imageUrl);
}
private boolean isImage(String fileExtName) {
if (fileExtName.equals("jpg") || fileExtName.equals("png") || fileExtName.equals("bmp")
|| fileExtName.equals("gif")) {
return true;
} else {
return false;
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【项目介绍】 Java课设基于BootStrap+JSP+Servlet+Mysql的咖啡厅点餐系统源码含项目说明+数据库sql.zipJava课设基于BootStrap+JSP+Servlet+Mysql的咖啡厅点餐系统源码含项目说明+数据库sql.zipJava课设 基于BootStrap+JSP+Servlet+Mysql的咖啡厅点餐系统源码含项目说明+数据库sql.zip 【备注】 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通。 2、项目适用人群:计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等计算机相关专业的在校学生、专业老师、行业内企业员工下载使用。 3、项目可用于:项目本身具有较高的学习借鉴价值,不仅适用于小白学习进阶,也可用于专业人员二次开发。当然也可作为毕设项目、课程设计、课程大作业、初期项目立项演示等。 4、如果基础还行,或者热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载使用,相互学习,共同进步!
资源推荐
资源详情
资源评论
收起资源包目录
Java课设基于BootStrap+JSP+Servlet+Mysql的咖啡厅点餐系统源码含项目说明+数据库sql.zip (390个子文件)
UploadItemImageServlet.class 7KB
ItemDaoImpl.class 6KB
LoginServlet.class 5KB
ModifyPasswordServlet.class 5KB
GetHistoryOrdersPageServlet.class 5KB
OrderServiceImpl.class 5KB
OrderDaoImpl.class 4KB
UserDaoImpl.class 4KB
ShoppingcartItemDaoImpl.class 4KB
AutoLoginFilter.class 4KB
PageUtils.class 4KB
OrderVODaoImpl.class 4KB
UserServiceImpl.class 3KB
GetShoppingcartServlet.class 3KB
RegisterServlet.class 3KB
WebUtils.class 3KB
AddOrderServlet.class 3KB
ModifyItemServlet.class 3KB
ModifyInfoServlet.class 3KB
AddItemServlet.class 3KB
AddShoppingcartItemServlet.class 3KB
ItemServiceImpl.class 3KB
SearchItemPageServlet.class 3KB
GetOrderDetailServlet.class 3KB
ModifyUserServlet.class 3KB
TransactionFilter.class 3KB
ModifyShoppingcartItemServlet.class 3KB
ShoppingcartItemServiceImpl.class 3KB
GetItemServlet.class 3KB
Page.class 3KB
DeleteItemServlet.class 3KB
RegisterFormBean.class 3KB
AdminDaoImpl.class 3KB
ModifyItemFormBean.class 3KB
GetAllUsersServlet.class 3KB
GetUsersPageServlet.class 2KB
GetItemsPageServlet.class 2KB
AddItemFormBean.class 2KB
ShoppingcartItemVODaoImpl.class 2KB
DeleteUserServlet.class 2KB
DeleteShoppingcartItemServlet.class 2KB
ModifyUserFormBean.class 2KB
GetItemHeatServlet.class 2KB
ShoppingcartItemVO.class 2KB
CharacterEncodingFilter.class 2KB
OrderVOServiceImpl.class 2KB
Item.class 2KB
LogoutServlet.class 2KB
LoginFormBean.class 2KB
ShoppingcartItemFormbean.class 2KB
AdminAuthorityFilter.class 2KB
UserAuthorityFilter.class 2KB
ModifyPasswordFormBean.class 2KB
ItemHeatVODaoImpl.class 2KB
OrderDetailVODaoImpl.class 2KB
OrderDetailVO.class 2KB
User.class 2KB
OrderVO.class 2KB
Order.class 2KB
ModifyInfoFormBean.class 2KB
NoCacheFilter.class 2KB
MyCharacterEncodingRequest.class 1KB
MyServletContextListener.class 1KB
JdbcUtils.class 1KB
OrderDetailDaoImpl.class 1KB
UploadItemImageServlet$1.class 1KB
ShoppingcartItem.class 1KB
ItemHeatVO.class 1KB
IOrderService.class 1KB
OrderDetail.class 1KB
RegisterUIServlet.class 1KB
ConnectionContext.class 1KB
Admin.class 1KB
IItemService.class 1KB
AdminServiceImpl.class 1KB
ShoppingcartItemVOServiceImpl.class 1KB
IItemDao.class 957B
IUserService.class 939B
IOrderDao.class 839B
IOrderVOService.class 811B
ItemHeatVOServiceImpl.class 790B
IShoppingcartItemService.class 723B
IOrderVODao.class 691B
IUserDao.class 632B
IShoppingcartItemDao.class 611B
UserExistException.class 495B
IPageService.class 440B
IBaseService.class 440B
IAdminDao.class 402B
IShoppingcartItemVOService.class 383B
IShoppingcartItemVODao.class 372B
ManageItemsUISevlet.class 318B
IOrderDetailVODao.class 303B
IItemHeatVOService.class 297B
IItemHeatVODao.class 286B
IAdminService.class 258B
IOrderDetailDao.class 230B
package-info.class 131B
package-info.class 129B
package-info.class 129B
共 390 条
- 1
- 2
- 3
- 4
资源评论
北航程序员小C
- 粉丝: 2222
- 资源: 1823
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功