1. 程式人生 > 程式設計 >java圖片和文字同時提交到表單的例項程式碼

java圖片和文字同時提交到表單的例項程式碼

首先來看如下效果圖片:

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實現圖片和文字同時提交到表單的詳細內容,感謝大家的學習和對我們的支援。