javaEE 使用表单上传图片

来源:互联网 发布:mac怎么联网恢复系统 编辑:程序博客网 时间:2024/06/02 00:19

上传思路

1.创建工厂对象

FileItemFactory fileItemFactory = new DiskFileItemFactory();

DiskFileItemFactory()的构造方法: 采用默认临界值和系统临时文件夹构造文件项工厂对象。

DiskFIleItemFactory类 ,该类创建FileItem对象的工厂类,开发人员可以在这个工厂类上配置上传过程中的

内存缓冲区大小和存放临时文件的目录,其中的repository属性主要指定上传文件保存的目录,sizeThreshold属性

则设置在内存中缓冲区大小


2.使用对象ServletFileUpload

ServletFileUpload servletFileUpload = new ServletFileUpload(fileItemFactory);
    org.apache.commons.fileupload.servlet.ServletFileUpload类是Apache文件上传组件处理文件上传的核心高级类(所谓高级就是不需要管底层实现,暴露给用户的简单易用的接口)。

3.判断表单enctype为否为mutipart-data

servletFileUpload .isMultipartContent(request)

4.如果表单含有上传标签,那么getParamMap方法失效,因为前台input太多,所以我们要使用beanUtils快速封装,那么我们就需要自己封装Map了

Map<String, String> paramsMap = new HashMap<String, String>();

5.调用servletFileUpload 的parseRequest()方法使用其parseRequest(HttpServletRequest) 方法可以将通过表单中每一个HTML标签提交的数据封装成一个FileItem对象,然后以List列表的形式返回。

List<FileItem> itemList = sf.parseRequest(request);

6.开始上传

for (FileItem fileItem : itemList) {if (!fileItem.isFormField())// 判断是否为上传组件{// 1.1执行上传// 1.1.1获取服务器上传目录路径String path = getServletContext().getRealPath("/products");// 1.1.2上传InputStream is = fileItem.getInputStream();// getFieldName()获取表单标签name属性值// getName()获取文件名// getString()获取表单标签value值FileOutputStream fos = new FileOutputStream(new File(path,fileItem.getName()));IOUtils.copy(is, fos);// 清除临时文件fileItem.delete();is.close();fos.close();// 将pimage属性存入mapparamsMap.put(fileItem.getFieldName(), "products/"+ fileItem.getName());} else// 普通组件{paramsMap.put(fileItem.getFieldName(),fileItem.getString("UTF-8"));}}

以下是全部代码 

java后台代码

public void add(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException, FileUploadException,IllegalAccessException, InvocationTargetException {FileItemFactory fileItemFactory = new DiskFileItemFactory();ServletFileUpload sf = new ServletFileUpload(fileItemFactory);if (sf.isMultipartContent(request))// 判断表单enctype为否为mutipart-data{// 如果表单含有上传标签,那么getParamMap方法失效,// 因为前台input太多,所以我们要使用beanUtils快速封装,那么我们就需要自己封装Map了Map<String, String> paramsMap = new HashMap<String, String>();List<FileItem> itemList = sf.parseRequest(request);// 1.上传for (FileItem fileItem : itemList) {if (!fileItem.isFormField())// 判断是否为上传组件{// 1.1执行上传// 1.1.1获取服务器上传目录路径String path = getServletContext().getRealPath("/products");// 1.1.2上传InputStream is = fileItem.getInputStream();// getFieldName()获取表单标签name属性值// getName()获取文件名// getString()获取表单标签value值FileOutputStream fos = new FileOutputStream(new File(path,fileItem.getName()));IOUtils.copy(is, fos);// 清除临时文件fileItem.delete();is.close();fos.close();// 将pimage属性存入mapparamsMap.put(fileItem.getFieldName(), "products/"+ fileItem.getName());} else// 普通组件{paramsMap.put(fileItem.getFieldName(),fileItem.getString("UTF-8"));}}// 2.封装product对象 保存到数据库里Product product = new Product();BeanUtils.populate(product, paramsMap);// 调用保存保存boolean result = ps.addProduct(product);if (result) {response.getWriter().println("<script>confirm('添加成功');location.href='/ShopStore/product?method=list';</script>");} else {response.getWriter().println("<script>confirm('添加失败');location.href='/ShopStore/admin/product/add.jsp;</script>");}}}

Html 前台代码

<table cellSpacing="1" cellPadding="5" width="100%" align="center" bgColor="#eeeeee" style="border: 1px solid #8ba7e3" border="0"><tr><td class="ta_01" align="center" bgColor="#afd1f3" colSpan="4"height="26"><strong><STRONG>添加商品</STRONG></strong></td></tr><tr><td width="18%" align="center" bgColor="#f5fafe" class="ta_01">商品名称:</td><td class="ta_01" bgColor="#ffffff"><input type="text" name="pname" value="" id="userAction_save_do_logonName" class="bg"/></td><td width="18%" align="center" bgColor="#f5fafe" class="ta_01">是否热门:</td><td class="ta_01" bgColor="#ffffff"><select name="is_hot"><option value="1">是</option><option value="0">否</option></select></td></tr><tr><td width="18%" align="center" bgColor="#f5fafe" class="ta_01">市场价格:</td><td class="ta_01" bgColor="#ffffff"><input type="text" name="market_price" value="" id="userAction_save_do_logonName" class="bg"/></td><td width="18%" align="center" bgColor="#f5fafe" class="ta_01">商城价格:</td><td class="ta_01" bgColor="#ffffff"><input type="text" name="shop_price" value="" id="userAction_save_do_logonName" class="bg"/></td></tr><tr><td width="18%" align="center" bgColor="#f5fafe" class="ta_01">商品图片:</td><td class="ta_01" bgColor="#ffffff" colspan="3"><input type="file" name="pimage" /></td></tr><tr><td width="18%" align="center" bgColor="#f5fafe" class="ta_01">所属分类:</td><td class="ta_01" bgColor="#ffffff" colspan="3"><select name="cid"><option value="1">大型电器</option><option value="2">手机数码</option><option value="3">衣帽箱包</option></select></td></tr><tr><td width="18%" align="center" bgColor="#f5fafe" class="ta_01">商品描述:</td><td class="ta_01" bgColor="#ffffff" colspan="3"><textarea name="pdesc" rows="5" cols="30"></textarea></td></tr><tr><td class="ta_01" style="WIDTH: 100%" align="center"bgColor="#f5fafe" colSpan="4"><button type="submit" id="userAction_save_do_submit" value="确定" class="button_ok">确定</button><FONT face="宋体">       </FONT><button type="reset" value="重置" class="button_cancel">重置</button><FONT face="宋体">       </FONT><INPUT class="button_ok" type="button" onclick="history.go(-1)" value="返回"/><span id="Label1"></span></td></tr></table></form>



原创粉丝点击