java图片和文本同时提交到表单的实例代码

所属分类: 软件编程 / java 阅读数: 78
收藏 0 赞 0 分享

首先来看如下效果图片:

表单代码:

<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实现图片和文本同时提交到表单的详细内容,感谢大家的学习和对脚本之家的支持。

更多精彩内容其他人还在看

Java实现一个简单的文件上传案例示例代码

这篇文章主要介绍了Java实现一个简单的文件上传案例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

详解在spring中使用JdbcTemplate操作数据库的几种方式

这篇文章主要介绍了详解在spring中使用JdbcTemplate操作数据库的几种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

java中的switch case语句使用详解

这篇文章主要介绍了java中的switch case语句使用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

深入理解Java 线程池

这篇文章主要介绍了Java 线程池的相关资料,文中讲解非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
收藏 0 赞 0 分享

详解mybatis #{}和${}的区别、传参、基本语法

这篇文章主要介绍了mybatis #{}和${}的区别、传参、基本语法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

MyBatis 中 ${}和 #{}的正确使用方法(千万不要乱用)

这篇文章主要介绍了MyBatis 中 ${}和 #{}的正确使用方法,本文给大家提到了MyBatis 中 ${}和 #{}的区别,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

详解Mybatis中的 ${} 和 #{}区别与用法

这篇文章主要介绍了Mybatis中的 ${} 和 #{}区别与用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

Maven安装过程图文详解

这篇文章主要介绍了Maven安装过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
收藏 0 赞 0 分享

SpringBoot登录拦截配置详解(实测可用)

这篇文章主要介绍了SpringBoot登录拦截配置详解(实测可用),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

JAVA 内存溢出案例汇总

这篇文章主要介绍了JAVA 内存溢出案例的汇总,文中讲解非常细致,帮助各位工作学习时避免内存溢出,感兴趣的朋友可以了解下
收藏 0 赞 0 分享
查看更多