ssm調用webservice接口並進行文件傳輸


ssm調用接口時大致分為三步,

1,Java后台使用 MultipartFile 接收文件后將類型轉為 file ,

2,將file進行base64加密

3,調用接口進行傳輸

 

ssm調用webservice代碼:

import org.apache.commons.fileupload.disk.DiskFileItem;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.commons.CommonsMultipartFile;

import com.alibaba.fastjson.JSONObject;

/** * 插入數據測試接口 * @param request * @param fileONE * @param fileTOW * @return */ @RequestMapping("/webJKInsert") @ResponseBody public Map<String,Object> webJKInsert(HttpServletRequest request, MultipartFile fileONE, MultipartFile fileTOW) throws IOException { File fileO = null; File fileT = null; String base64FileO = ""; String base64FileT = ""; String fileONEName = ""; String fileTOWName = ""; if(fileONE!=null?fileONE.getSize()>0:false){//將文件轉base64字符串 fileONEName = fileONE.getOriginalFilename();//獲取文件名 CommonsMultipartFile cf= (CommonsMultipartFile)fileONE; //File為MultipartFile類型 DiskFileItem fi = (DiskFileItem)cf.getFileItem(); fileO = fi.getStoreLocation(); base64FileO = MulFileUtil.fileBase64(fileO); } if(fileTOW!=null?fileTOW.getSize()>0:false){ fileTOWName = fileTOW.getOriginalFilename();//獲取文件名 CommonsMultipartFile cf= (CommonsMultipartFile)fileTOW; //File為MultipartFile類型 DiskFileItem fi = (DiskFileItem)cf.getFileItem(); fileT = fi.getStoreLocation(); base64FileT = MulFileUtil.fileBase64(fileT); } //拼接原文件名和轉碼后的內容 String fileONES=null; String fileTOWS=null; if(fileONEName!=null && !"".equals(fileONEName) && base64FileO!=null &&!"".equals(base64FileO)){ fileONES = fileONEName+","+base64FileO;//拼接報告1 } if(fileTOWName!=null && !"".equals(fileTOWName) && base64FileT!=null &&!"".equals(base64FileT)){ fileTOWS = fileTOWName+","+base64FileT;//拼接報告2 } String insertXML = InsertXML.insertNotice( fileONES, fileTOWS ); logger.info("調用服務端新增接口中···"); String insert = jk.getInsert(insertXML);//webservice接口 if(insert!=null ?true:false){ logger.info("調用服務端成功···"+insert); }else{ logger.info("調用服務端失敗···"+insert); } Map<String,Object> map = JSONObject.parseObject(insert); return map; }

 

文件轉換工具類

package com.ljs.utils;

import java.io.*;
import java.util.Base64;

/**
 * 文件轉換工具類
 */
public class MulFileUtil {

    /**
     * file轉換為base64
     * @param file
     * @return
     * @throws IOException
     */
    public static String fileBase64(File file) throws IOException {
        String base64 = null;
        InputStream in = null;
        try {
            in = new FileInputStream(file);
            byte[] bytes=new byte[(int)file.length()];
            in.read(bytes);
            base64 = Base64.getEncoder().encodeToString(bytes);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return base64;
    }

    /**
     * base64轉file並寫入磁盤
     * @param str
     * @param fileName
     * @return
     * @throws UnsupportedEncodingException
     */
    public static File base64File(String str,String fileName) throws UnsupportedEncodingException {
        File file = null;
        //創建文件目錄
        String filePath="/webJKFile";
        File  dir=new File(filePath);
        if (!dir.exists() && !dir.isDirectory()) {
            dir.mkdirs();
        }
        BufferedOutputStream bos = null;
        java.io.FileOutputStream fos = null;
        try {
            byte[] bytes = Base64.getDecoder().decode(str);
            file=new File(filePath+"\\"+fileName);
            fos = new java.io.FileOutputStream(file);
            bos = new BufferedOutputStream(fos);
            bos.write(bytes);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return file;
    }
}

插入數據拼接xml格式報文

package com.ljs.utils;

/**
 * 插入數據xml
 */
public class InsertXML {
    public static String insertNotice(String assessment,String research){

        String xml="";
        StringBuilder builder = new StringBuilder();

        builder.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
        builder.append("<xml-body>");
        builder.append("<Head>");
        builder.append("<Version>1.0</Version>");
        builder.append("<MethodCode>1</MethodCode>");
        builder.append("<BeanId>testService</BeanId>");
        builder.append("<ParamType>xml</ParamType>");
        builder.append("</Head>");
        builder.append("<Body>");
        builder.append("<sysPass>chtrans2000</sysPass>");
        builder.append("<prop>");
//<!--上傳PDF附件必填 -->
        builder.append("<assessment>"+assessment+"</assessment>");

        //VARCHAR2(30)<!--上傳附件必填 -->
        builder.append("<research>"+research+"</research>");


        builder.append("</prop>");
        builder.append("</Body>");
        builder.append("</xml-body>");

        xml = builder.toString();
        return xml;
    }
}

 

webservice服務端

  /**
   * 數據新增
   * @param xml
   * @return
   */
  public String getInsert(String xml){
    System.out.println("客戶端正在調用新增方法......");
    
    Map<String,Object> map = new HashMap<>();
    String name = "";
    String reg = "\\d+(\\.\\d+)?";
    Document doc = null;
    try {
      //連接數據庫
      System.out.println("正在連接數據庫···");
    Class.forName("com.mysql.cj.jdbc.Driver"); Connection connection
= DriverManager.getConnection("jdbc:mysql://localhost:3306/jk?serverTimezone=CTT&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true", "root", "root"); PreparedStatement preparedStatement; doc = DocumentHelper.parseText(xml); // 將字符串轉為XML Element rootElt = doc.getRootElement(); // 獲取根節 Iterator iterss = rootElt.elementIterator("Body"); ///獲取根節點下的子節點body // 遍歷body節點 while (iterss.hasNext()) { Element recordEless = (Element) iterss.next(); String sysPass = recordEless.elementTextTrim("sysPass"); // 拿到body節點下的子節點sysPass值 Iterator itersElIterator = recordEless.elementIterator("prop"); // 獲取子節點body下的子節點prop // 遍歷prop節點下的Response節點 while (itersElIterator.hasNext()) { Element itemEle = (Element) itersElIterator.next(); //map.put("projectName",itemEle.elementTextTrim("projectName")); // 拿到body下的子節點prop下的字節點projectName的值 SimpleDateFormat simpleDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//獲取系統時間 //報告1上傳 if(itemEle.elementTextTrim("assessment")!=null && !"".equals(itemEle.elementTextTrim("assessment")) && !"null".equals(itemEle.elementTextTrim("assessment"))){ System.out.println("正在上傳報告1···"+itemEle.elementTextTrim("assessment")); String uuid = UUID.randomUUID().toString();//生成文件唯一編號 String[] split = itemEle.elementTextTrim("assessment").split(",");//分割獲取文件名和經過base64轉碼后的字符串 String assessmentName = split[0];//文件名 String assessmentFile = split[1];//轉碼后的字符串 Map<String,Object> maps = MulFileUtil.base64File(assessmentFile,assessmentName);//獲取存入file表的字段數據 try { preparedStatement = connection.prepareStatement("insert into file (batch_no,name,address,suffix,createtime) values (?,?,?,?,?)"); preparedStatement.setString(1, uuid); preparedStatement.setString(2, (String) maps.get("jcoriginFileName")); preparedStatement.setString(3,(String) maps.get("fileAddress")); preparedStatement.setString(4,""); preparedStatement.setString(5,simpleDate.format(new Date())); preparedStatement.executeUpdate(); }catch (Exception e){ e.printStackTrace(); name = "{\"msg\":\"false\",\"message\":\"報告1上傳失敗\"}"; return name; } map.put("assessment",uuid);//報告1 } //報告2上傳 if(itemEle.elementTextTrim("research")!=null && !"".equals(itemEle.elementTextTrim("research"))&& !"null".equals(itemEle.elementTextTrim("research"))){ System.out.println("正在上傳報告2···"+itemEle.elementTextTrim("research")); String uuid = UUID.randomUUID().toString();//生成文件唯一編號 String[] split = itemEle.elementTextTrim("research").split(",");//分割獲取文件名和經過base64轉碼后的字符串 System.out.println(itemEle.elementTextTrim("research")); String researchName = split[0];//文件名 String researchFile = split[1];//轉碼后的字符串 Map<String,Object> maps = MulFileUtil.base64File(researchFile,researchName);//獲取存入file表的字段數據 try { preparedStatement = connection.prepareStatement("insert into file (batch_no,name,address,suffix,createtime) values (?,?,?,?,?)"); preparedStatement.setString(1, uuid); preparedStatement.setString(2, (String) maps.get("jcoriginFileName")); preparedStatement.setString(3,(String) maps.get("fileAddress")); preparedStatement.setString(4,""); preparedStatement.setString(5,simpleDate.format(new Date())); preparedStatement.executeUpdate(); }catch (Exception e){ name = "{\"msg\":\"false\",\"message\":\"報告2上傳失敗\"}"; return name; } map.put("research",uuid);//報告2 } //編寫SQL,共計34個字段,不包含自增長id,isdelete,createtime三個。 preparedStatement = connection.prepareStatement("insert into notice (createtime,assessment,research) VALUES (?,?,?)"); //占位符,從1開始 preparedStatement.setString(1, simpleDate.format(new Date())); preparedStatement.setString(2, (String) map.get("assessment")); preparedStatement.setString(3, (String) map.get("research")); //返回的結果是一個整數表示該操作影響了數據表中的幾條數據 int i = preparedStatement.executeUpdate(); if(i>0){ name = "{\"msg\":\"true\",\"message\":\"新增成功\"}"; System.out.println("客戶端調用成功"); }else{ name = "{\"msg\":\"false\",\"message\":\"新增失敗\"}"; System.out.println("客戶端調用失敗"); } //關閉 preparedStatement.close(); connection.close(); System.out.println("調用新增方法成功,已關閉數據庫連接···"); } } } catch (DocumentException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } return name; }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM