您好,登录后才能下订单哦!
密码登录
            
            
            
            
        登录注册
            
            
            
        点击 登录注册 即表示同意《亿速云用户服务条款》
        今天就跟大家聊聊有关java中怎么将图片和文本同时提交到表单,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
表单代码:
<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导入,如下:
<!-- 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代码如下:
主要判断每一个参数的属性,图片的则进行图片处理,文本则进行文本处理。
//新增产品
 @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中怎么将图片和文本同时提交到表单有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注亿速云行业资讯频道,感谢大家的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。