fileUpload实现文件上传

1.要导入上传字节码文件【上传用的】

2.设置表单提交方式为post和enctype="multipart/form-data"

3.导入【拷贝用的】

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%
	String path = request.getContextPath();
	String basePath = request.getScheme() + "://"
			+ request.getServerName() + ":" + request.getServerPort()
			+ path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
	<head>
		<base href="<%=basePath%>">

		<title>My JSP 'systemUser.jsp' starting page</title>

		<meta http-equiv="pragma" content="no-cache">
		<meta http-equiv="cache-control" content="no-cache">
		<meta http-equiv="expires" content="0">
		<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
		<meta http-equiv="description" content="This is my page">
		<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

	</head>

	<body>
		<form action="back/SystemItemServlet?op=add" method="post" enctype="multipart/form-data" name="myForm">
商品名称<input type="text" name="name"><br><br>
商品价格<input type="text" name="price"><br><br>
添加时间<input type="text" name="putTime"><br><br>
商品图片<input type="file" name="img"/><br><br>
商品描述<textarea name="description"></textarea><br><br>
<input type="submit" value="添加">
<input type="reset" value="重置"> 
		</form>
	</body>
</html>

import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

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.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.zxg.dao.IItemDao;
import com.zxg.dao.IItemTypeDao;
import com.zxg.dao.impl.ItemDao;
import com.zxg.dao.impl.ItemTypeDao;
import com.zxg.util.PrimaryKeyUtil;
import com.zxg.vo.Item;
import com.zxg.vo.ItemType;

public class SystemItemServlet extends HttpServlet {

	private IItemDao itemDao = new ItemDao();
	
	private IItemTypeDao itemTypeDao = new ItemTypeDao();

	@Override
	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		String op = request.getParameter("op");
		// 这里可以采用StringUtils包来判断,由于没有该库
		// 自己手写下
		if (op != null && !"".equals(op.trim())) {
			if ("list".equals(op)) {
				this.list(request, response);
			} else if ("add".equals(op)) {
				//上传
				this.add(request, response);
			} else if ("listTypes".equals(op)) {
				this.listTypes(request, response);
			}	
			return;
		}
		this.list(request, response);
	}

	private void list(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		List<Item> items = this.itemDao.findAll();
		request.setAttribute("items", items);
		request.getRequestDispatcher("/back/SystemItem/list.jsp").forward(
				request, response);
	}

	private void listTypes(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		List<ItemType> types = this.itemTypeDao.findAll();
		request.setAttribute("types", types);
		request.getRequestDispatcher("/back/SystemItem/add.jsp").forward(
				request, response);
	}
	
	/**
	 * 上传
	 * @param request
	 * @param response
	 * @throws ServletException
	 * @throws IOException
	 */
	private void add(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		DiskFileItemFactory factory = new DiskFileItemFactory();
		ServletFileUpload upload = new ServletFileUpload(factory);
		//设置总文件大小为5M
		upload.setSizeMax(1024 * 1024 * 5);
		//设置单个文件上传的大小 
		upload.setFileSizeMax(1024 * 1024 * 5);
		//把客户端上传的文件流读取到内存并封装为List<FileItem>接口
		//文件可能有多个
		try {
			Item item = new Item();
			List<FileItem> list = upload.parseRequest(request);
			Map<String, String> map = new HashMap<String, String>();
			for(FileItem fileItem : list){
				if(fileItem.isFormField()){
					String key = fileItem.getFieldName();
					//防止乱码
					String value = fileItem.getString("gbk");
					map.put(key, value);
				}else{
					//获取选择框的文件全称(包括文件名称+后缀),自定义文件名
					//需拆分文件全称获取后缀,然后跟自定义文件名组成新的文件全称
					String fileName = fileItem.getName();
					//获取文件扩展名,即后缀,如.doc
					String ext = fileName.substring(fileName.lastIndexOf("."));
					fileName = PrimaryKeyUtil.getOnlyFileName() + ext;
					
					map.put("img",fileName);
					//获取webroot下的upload的绝对路径,利用servletContext获取WebRoot下的文件
					//斜杠带不带都可,如D:/apache-tomcat-6.0.30/webapps/myshop/upload
					String uploadPath = this.getServletContext().getRealPath("/upload");
					//这样写也可以new File(uploadPath+"/"+fileName),写到服务器的upload文件下并生成
					//自定义文件全名
					//fileItem.write(new File(uploadPath,fileName));
					fileItem.write(new File(uploadPath+"/" + fileName));
				}
			}
			//拷贝,map拷贝到item中
			org.apache.commons.beanutils.BeanUtils.populate(item, map);
			//添加到数据库
			this.itemDao.add(item);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值