文件上传功能的实现

前提:拷入两个包:

一、Jsp页面设置:

制作表单:

<form action="${pageContext.request.contextPath}/AddProdServlet" method="post"enctype="multipart/form-data">

<table border="1">

<tr>

           <td>商品图片</td>

           <td><inputtype="file" name="file1"/></td>

       </tr>

<tr>

扫描二维码关注公众号,回复: 3646525 查看本文章

           <tdcolspan="2"><input type="submit"value="添加商品"/></td>

       </tr>

</table>

</form>

二.Servlet操作:

//创建map对象放置文件上传名和值

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

//创建DiskFileItemFactory对象,设置缓冲区大小和文件目录

DiskFileItemFactory factory = newDiskFileItemFactory()

factory.setSizeThreshold(1024*100);

factory.setRepository(new File(this.getServletContext()

.getRealPath("/WEB-INF/tmp")));

// 使用DiskFileItemFactory对象创建ServletFileUpload对象,并设置上传文件的大小限制。

ServletFileUpload fileUpload = new ServletFileUpload(factory);

//检查是否是正确的文件上传表单(使用isMultipartContent可以判断是普通表单还是带有文件的表单)

           if(!fileUpload.isMultipartContent(request))

           {

              thrownew RuntimeException("请用正确的表单进行上传");

           }

//设置单个文件上传的大小

fileUpload.setFileSizeMax(1024 * 10204 * 5);

//设置文件上传的总大小

fileUpload.setSizeMax(1024 * 10204 * 200);

//设置编码,解决上传文件名的乱码问题

fileUpload.setHeaderEncoding("utf-8");

//文件上传解析请求

List<FileItem> list = fileUpload.parseRequest(request);

//使用增强for循环遍历文件上传的内容

for (FileItem item : list) {

//如果当前返回的内容是普通表单的类型

              if (item.isFormField()) {

//定义nameame用于返回表单标签name属性的值

                  Stringname = item.getFieldName();

//设置返回的value值是utf-8的格式

                  Stringvalue = item.getString("utf-8");

//将文件上传名和值放置到map中

                  map.put(name, value);

                  // System.out.println(name+" "+value);

              }else {

//如果不是普通表单的形式

                  Stringname = item.getName();

                  // 创建随机名称,这样能够方便让上传文件名唯一

                  StringuuidName = UUID.randomUUID().toString()+ name;

                  // System.out.println(uuidName);

                  // 创建文件保存的路径

                  Stringpath = this.getServletContext().getRealPath(

                         "/WEB-INF/upload");

                //在系统中利用hashCode值,这样才能确保图片上传是唯一的

                  inthashCode = uuidName.hashCode();

                //将hashCode值转换成十六进制的字符串

                  StringhashStr = Integer.toHexString(hashCode);

                //将获得的字符串转换成数组

                  charhss[] = hashStr.toCharArray();  

                  Stringimgurl= "/WEB-INF/upload";

//遍历,这样可以让文件包分配资源合理

                  for (charc : hss) {

                     path += "/" + c;

                     imgurl += "/" + c;

                  }

                  imgurl += "/" + uuidName;

                  map.put("imgurl", imgurl);

                  new File(path).mkdirs();

                  System.out.println(path);

                  // 文件的读写

                  InputStreamin = item.getInputStream();

                  OutputStreamout = new FileOutputStream(new File(path,uuidName));

                  IOUtils.In2Out(in, out);

                  IOUtils.close(in, out);

                  // 删除临时文件

                  item.delete();

                  PicUtilspicUtils = new PicUtils(path+"/"+uuidName);

                  picUtils.resizeByHeight(100);

              }

           }

           Prodprod = new Prod();

         //将前台传过来的数据封装到javaBean中;

           BeanUtils.populate(prod, map);

           service.addProd(prod);

           //3 提示成功,返回首页

           response.getWriter().write("添加商品成功!3秒回首页");

           response.setHeader("Refresh", "3;url="+request.getContextPath()+"/index.jsp");

       }catch (Exception e) {

           e.printStackTrace();

       }


猜你喜欢

转载自blog.csdn.net/u012994320/article/details/65629675