org.apache.commons.fileupload 实现简单上传功能

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

		// MAP目的:携带数据{username<==>tom,password<==>1234,userhead<==>/images/11.bmp}
		Map<String, String> map = new HashMap<String, String>();
		// 目的:携带数据,向sercie,dao传递
		User user = new User();
		try {
			// 以下三行代码功能: 通过request.getInputStream();获取到请求体的全部内容
			// 进行解析,将每对分割线中的内容封装在了FileItem对象中
			DiskFileItemFactory fac = new DiskFileItemFactory();
			ServletFileUpload upload = new ServletFileUpload(fac);
			List<FileItem> list = upload.parseRequest(request);
			// 4_遍历集合
			for (FileItem item : list) {
				if (item.isFormField()) {
					// 5_如果当前的FileItem对象是普通项
					// 将普通项上name属性的值作为键,将获取到的内容作为值,放入MAP中
					//item.getString("utf-8") 解决普通项中文名乱码
					map.put(item.getFieldName(), item.getString("GBK"));

				} else {
					// 6_如果当前的FileItem对象是上传项
					// 通过FileItem获取到输入流对象,通过输入流可以获取到图片二进制数据
					// 在服务端创建一个空文件(后缀必须和上传到服务端的文件名后缀一致)
					// 建立和空文件对应的输出流
					// 将输入流中的数据刷到输出流中
					// 释放资源
				
					// System.out.println(item.getString());
					// //图片的二进制数据,不推荐大家使用此API获取图片数据
					// item.getInputStream();//推荐通过此API获取图片数据

					// 通过FileItem获取到输入流对象,通过输入流可以获取到图片二进制数据
					InputStream is = item.getInputStream();
          // C:\Users\hasee\Workspaces\MyEclipse 2016 CI\.metadata\.me_tcat7\wtpwebapps\WebProject\img
                    //必须先在项目创建该文件夹,否则会报找不到该路径
					String realPath = getServletContext().getRealPath("/images/img/");
					// 在服务端创建一个空文件(后缀必须和上传到服务端的文件名后缀一致)
					File file = new File(realPath, item.getName());
					if (!file.exists()) {
						file.createNewFile();
					}
					// 建立和空文件对应的输出流
					OutputStream os = new FileOutputStream(file);
					//  IOUtils 将输入流中的数据刷到输出流中
					IOUtils.copy(is, os);
					// 释放资源
					IOUtils.closeQuietly(is);
					IOUtils.closeQuietly(os);
					// 向map中存入一个键值对的数据 userhead<===> /image/11.bmp
					map.put("userhead", "/images/img/" + item.getName());
				}
			}
			// 7_利用BeanUtils将MAP中的数据填充到user对象上

			BeanUtils.populate(user, map);
			// 8_调用servcie_dao将user上携带的数据存入数据仓库,重定向到查询全部商品信息路径
			System.out.println("保存用户数据");

		} catch (Exception e) {
			e.printStackTrace();
		}
	}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值