java接收form表单提交的图片以及文档信息

实现思路:

存入数据库:传图片时,为了防止图片名重复先使用UUID对图片名进行重命名,然后再把图片放在指定路径下,最后把图片的路径存放在数据库中。
取出图片:从数据库中取出相应的图片路径,回显到前端页面

首先需要引入两个jar包:

  • commons-fileUpload.jar
  • commons-io.jar

文件上传分析:

1.普通表单的提交默认为enctype="application/x-www-form-urlencoded";但是当表单中存在文件类型时,需要设置enctype="multipart/form-data",它不对字符进行编码,用于发送二进制的文件(即所有文件类型,如视频、图片、音乐、文档都可以用此类型entype)。

2.表单请求方式必须为post。

3.接收时不能再用request.getParameter()进行接收,而是request.getInputStream()解析二进制流,得到ServletInputStream对象。

表单提交页面:

<form action="AddGoodsServlet" method="post" enctype="multipart/form-data" name="goodsForm" id="form">
                <p>商品名:<input type="text" name="pName" id="pName"/></p>
                <p>商品种类:
                    <select name="pType" id="pType">
                        <option value="数码产品">数码产品</option>
                        <option value="玩具手办">玩具手办</option>
                        <option value="潮流服装">潮流服装</option>
                        <option value="闲置电器">闲置电器</option>
                        <option value="健身器材">健身器材</option>
                        <option value="万卷图书">万卷图书</option>
                    </select>
                </p>
                <p>商品图片:
                <input type="file"  name="pPhoto"/></p>                 
                <p>商品价格:<input type="text" name="pPrice" id="pPrice"/></p>
                <p>备注:<input type="text" name="Text" id="Text"/></p>
                <p><input type="button" value="确认上架" /></p>
                </form>

Servlet接收页面:

 1 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 2         DiskFileItemFactory factory=new DiskFileItemFactory();
 3         ServletFileUpload upload=new ServletFileUpload(factory);
 4         HttpSession session = request.getSession();  
 5         String username = (String) session.getAttribute("username");//获取到登录时存入session里的用户对象
 6         upload.setHeaderEncoding("UTF-8");
 7       //浏览器使用何种方式进行编码传递数据,那么就应该指示服务器以何种方式解析数据,从而获得原来的数据
 8         response.setContentType("text/html;charset=UTF-8");  
 9         //文件名中文乱码处理也可以如此写
10 //        upload.setHeaderEncoding("utf-8");
11         //设置缓冲区大小与临时文件目录
12         factory.setSizeThreshold(1024*1024*10);
13         File uploadTemp=new File("D:\\picture");
14         uploadTemp.mkdirs();
15         factory.setRepository(uploadTemp);
16  
17         //设置单个文件大小限制
18         upload.setFileSizeMax(1024*1024*10);
19         //设置所有文件总和大小限制
20         upload.setSizeMax(1024*1024*30);
21         GoodsDao dao=new GoodsDaoImpl();
22         Goods g=new Goods();
23         try {
24             List<FileItem> filelist=upload.parseRequest(request);
25             System.out.println(filelist);
26             for (FileItem fileItem:filelist){
27                 g.setUsername(username);
28                 if (!fileItem.isFormField()&&fileItem.getName()!=null&&!"".equals(fileItem.getName())){
29                    //接收文件内容
30                     String filName=fileItem.getName();
31                     System.out.println(filName);
32                     //利用UUID生成伪随机字符串
33                     String uuid= UUID.randomUUID().toString();
34                     //获取文件后缀名
35                     String suffix=filName.substring(filName.lastIndexOf("."));
36                     System.out.println(suffix);
37                     String newFileName = uuid + suffix;
38                     //System.out.println("新文件名:" + newFileName);
39                    // 定义文件写入位置,调用FileItem的write()方法,写入文件
40                     String uploadPath="D:/HLBBS/picture";
41                     File file=new File(uploadPath);
42                     System.out.println("uploadPath:"+uploadPath);
43                     file.mkdirs();
44                     //写入文件到磁盘
45                     fileItem.write(new File(uploadPath,uuid+suffix));
46                     String pPhoto=uuid+suffix;
47                    g.setpPhoto(pPhoto);
48                  // System.out.println("pPhoto:"+pPhoto);
49                 }else {
50                         //接收非文件内容
51                     String name = fileItem.getFieldName(); 
52                     String value = fileItem.getString();
53                     if("pName".equals(name)) {
54                         String pName=value;
55                         pName = new String(pName.getBytes("iso-8859-1"),"UTF-8"); 
56                         //System.out.println("商品名:"+pName);
57                         g.setpName(pName);
58                     }else if("pType".equals(name)) {
59                         String pType=value;
60                         pType = new String(pType.getBytes("iso-8859-1"),"UTF-8");
61                         //System.out.println("pType:"+pType);
62                         g.setpType(pType);
63                     }else if("pPrice".equals(name)) {
64                         String pPrice=value;
65                         pPrice = new String(pPrice.getBytes("iso-8859-1"),"UTF-8");
66                         //System.out.println("pPrice:"+pPrice);
67                         g.setpPrice(pPrice);
68                     }else if("Text".equals(name)) {
69                         String Text=value;
70                         Text = new String(Text.getBytes("iso-8859-1"),"UTF-8");
71                         //System.out.println("Text:"+Text);
72                         g.setText(Text);
73                     }    
74                 }
75             }
76             
77         }  catch (Exception e) {
78             e.printStackTrace();
79         }
80         //添加到数据库
81         dao.insert(g);
82         ArrayList<Goods> list=dao.selectAllGoods();
83         request.setAttribute("list", list);
84         request.getRequestDispatcher("#").forward(request, response);    
85     }

 这样就可以完成了图片在数据库中的存取操作了。

如果大家想了解更多有关知识,可以看看这篇博客:

java web文件上传——FileUpload
posted @ 2023-04-05 15:29  晚风67  阅读(940)  评论(0)    收藏  举报