java实现图片和文本同时提交到表单

内容摘要
首先来看如下效果图片:表单代码:(推荐视频教程:java视频教程)<form action="/addPro" method="post" enctype="multipart/form-data">
<a>宠物(或产品)类型:</a><select id="cat
文章正文

首先来看如下效果图片:

83c39db510724db771ecaf514229d9e.png

表单代码:

(推荐视频教程:java视频教程)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<form action="/addPro" method="post" enctype="multipart/form-data">
    <a>宠物(或产品)类型:</a><select id="categoryID" name="cid"></select><br/><br/>
    <a>宠物(或产品)名字:</a><input type="text" name="cname"><br/><br/>
    <a>一句话介绍:</a><input type="text" name="introduction"><br/><br/>
    <a>题目:</a><input type="text" name="title"><br/><br/>
    <a>价钱:</a><input type="text" name="price"><br/><br/>
    <a>库存:</a><input type="text" name="stock"><br/><br/>
    <a>状态:</a><select name="status">
        <option value="1">在售</option>
        <option value="2">下架</option>
        <option value="3">删除</option>
    </select><br/><br/>
    <a>头像设置:</a><input type="file" οnchange="previewFile()" name="fileName">
    <br/>
    <img src="${data.image}" alt="Image preview"/><br/>
    <a>详细描述(编辑完需要在文本框右上角点保存):</a><br/>
    <div id="editor">
        <p>商品详细描述</p>
        <p>编辑完需要在文本框右上角点保存</p>
    </div><input type="hidden" name="details" id="detail"><br/><br/>
    <input type="submit" value="新增商品">
</form>

提交表单是采用二进制方式提交,所以一般用来上传图片操作,当在这个表单下同时上传文本,就会报错。但是业务需要上传商品是文本和图片同时上传的,所以这里要用到commons的四个包,使用Maven导入,如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!-- https://mvnrepository.com/artifact/commons-io/commons-io有关图片文本同时上传 -->
   <dependency>
     <groupId>commons-io</groupId>
     <artifactId>commons-io</artifactId>
     <version>2.4</version>
   </dependency>
   <!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
   <dependency>
     <groupId>commons-fileupload</groupId>
     <artifactId>commons-fileupload</artifactId>
     <version>1.3.3</version>
   </dependency>
   <!-- https://mvnrepository.com/artifact/commons-collections/commons-collections -->
   <dependency>
     <groupId>commons-collections</groupId>
     <artifactId>commons-collections</artifactId>
     <version>3.1</version>
   </dependency>
   <!-- https://mvnrepository.com/artifact/commons-beanutils/commons-beanutils -->
   <dependency>
     <groupId>commons-beanutils</groupId>
     <artifactId>commons-beanutils</artifactId>
     <version>1.9.2</version>
   </dependency>

Java代码如下:

主要判断每一个参数的属性,图片的则进行图片处理,文本则进行文本处理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
//新增产品
    @RequestMapping("/addPro")
    public void addPro(HttpServletRequest request, HttpServletResponse response) throws IOException {
        //编码规范
        response.setContentType("text/html");
//      response.setCharacterEncoding("utf-8");
        Product product = new Product();
  
        //这种方法主要通过if (item.isFormField())这个条件判别文件还是非文件
        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);
        List items = null;
        try {
            items = upload.parseRequest(request);
        } catch (FileUploadException e) {
            e.printStackTrace();
        } // 解析request请求
        Iterator iter = items.iterator();// 遍历表单中提交过来的内容
        while (iter.hasNext()) {
            FileItem item = (FileItem) iter.next();
            if (item.isFormField()) { // 如果是表单域 ,就是非文件上传元素
                String value = item.getString("UTF-8"); // 获取value属性的值,这里需要指明UTF-8格式,否则出现中文乱码问题
                if (item.getFieldName().equals("cid")) {// 对应form中属性的名字
                    int categoryId = Integer.parseInt(value);
                    product.setCategory_id(categoryId);
                } else if (item.getFieldName().equals("cname")) {
                    product.setName(value);
                }else if (item.getFieldName().equals("introduction")) {
                    product.setIntroduction(value);
                }else if (item.getFieldName().equals("title")) {
                    product.setTitle(value);
                }else if (item.getFieldName().equals("price")) {
                    BigDecimal price=new BigDecimal(value);
                    product.setPrice(price);
                }else if (item.getFieldName().equals("stock")) {
                    product.setStock(Integer.parseInt(value));
                }else if (item.getFieldName().equals("status")) {
                    product.setStatus(Integer.parseInt(value));
                }else if (item.getFieldName().equals("details")) {
                    product.setDetail(value);
                }
            }else {
                String filename = item.getName(); // 文件的名字
  
                String imgname = filename.substring(0, filename.indexOf("."));  //减去“.”后面的字符
  
                //tomcat启动位置
//              String t1 = System.getProperty("user.dir").substring(0,
//                      System.getProperty("user.dir").length() - 4);
  
                String path = request.getServletContext().getRealPath("img"); //target找到img位置
                Long time = Calendar.getInstance().getTimeInMillis();  //时间戳,保证文件命名不重复
                String imgurl = "./img/"+imgname+time+".jpg";
                product.setImage(imgurl);
                System.out.println(imgurl);
                File saveFile = new File(path+"/" + imgname+time+".jpg"); // 定义一个file指向一个具体的文件
                try {
                    item.write(saveFile);// 把上传的内容写到一个文件中
                    System.out.println("上传到"+path+"成功");
                } catch (Exception e) {
                    /* e.printStackTrace(); */
                    System.out.println("文件"+path+"为空");
                }
            }
        }
  
        if(productDaoService.addProduct(product)){
            PrintWriter out = response.getWriter();
            out.print("<script language="javascript">alert('ADD SUCCESS');window.location.href='/admin/administrator'</script>");
        }else {
            PrintWriter out = response.getWriter();
            out.print("<script language="javascript">alert('增加失败');window.location.href='/admin/addProduct'</script>");
        }
    }

相关文章教程推荐:java入门教程

代码注释
[!--zhushi--]

作者:喵哥笔记

IDC笔记

学的不仅是技术,更是梦想!