SpringBoot中接收form-data请求参数处理后请求外部接口

SpringBoot中接收form-data请求参数处理后请求外部接口,第1张

SpringBoot中接收form-data请求参数处理后请求外部接口

缺点:此方法接收文件参数后会建立个本地文件夹。如环境中不允许创建文件夹,请看另一篇接收文件参数后请求外部接口的文档。

 

    @Autowired
    private GatewayParams gatewayParams;

    @Override
    public String createbyfile (@RequestBody MultipartFile file,String title,String fileType){
        MultiValueMap params = new linkedMultiValueMap<>();
        try {
            params.add("file",new FileSystemResource(convert(file)));
        } catch (IOException e) {
            e.printStackTrace();
        }
        params.add("title",title);
        params.add("fileType",fileType);


        //请求接口要传的头参数
        String appToken = gatewayParams.getGateDianZiToken();
        String appSecret = gatewayParams.getGateDianZiSecret();
        Date nowDate = new Date();
        Long timestamp = nowDate.getTime();
        double nonce = Math.random();
        //MD5加密头内容
        String signature= MD5Utils.stringToMD5(appToken+appSecret+timestamp.toString()+nonce);
        //封装请求外部接口的请求头参数
        HttpHeaders headers = new HttpHeaders();
        headers.set("x-qys-accesstoken",appToken);
        headers.set("x-qys-timestamp",timestamp.toString());
        headers.set("x-qys-nonce",nonce+"");
        headers.set("x-qys-signature",signature);
        //外部接口的请求地址
        String url =gatewayParams.getGateDianZiUrl() + "/v2/document/createbyfile";

        HttpEntity httpEntity = new HttpEntity<>(params,headers);

        RestTemplate restTemplate =new RestTemplate();
        //请求外部接口
        ResponseEntity response =restTemplate.postForEntity(url,httpEntity, JSONObject.class);

        Object result =response.getBody();
        if(result != null){
            Map resultMap = (Map) result;
            Map resultMap1=(Map)resultMap.get("result");
            //合同ID
            return (String) resultMap1.get("documentId");
        }else {
            return "";
        }

    }

    //创建本地文件夹
    public static File convert(MultipartFile file) throws IOException {
        File convFile = new File("temp_image",file.getOriginalFilename());
        if (!convFile.getParentFile().exists()) {
            // 应修改为log输出
            System.out.println("mkdir:" + convFile.getParentFile().mkdirs());
        }
        boolean fileBool=convFile.createNewFile();
        if( !fileBool){
            //应修改为log输出
            System.out.println("创建文件夹失败");
        }
        try (FileOutputStream fos= new FileOutputStream(convFile);){

            fos.write(file.getBytes());
        } catch (IOException e) {
            e.printStackTrace();
        }

        return convFile;
    }
MD5Utils是一个MD5加密的方法,是外部接口请求头约定需要的。
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Utils {
    public static String stringToMD5(String plainText) {
        byte[] secretBytes = null;
        try {
            secretBytes = MessageDigest.getInstance("md5").digest(
                    plainText.getBytes()
            );
        }
        catch (NoSuchAlgorithmException e){
            throw  new RuntimeException("没有这个md5算法!");
        }
        String md5code = new BigInteger(1, secretBytes).toString(16);
        for(int i = 0; i < 32 - md5code.length(); i++){
            md5code = "0" + md5code;
        }
        return md5code;
    }
}
private GatewayParams gatewayParams;是我配置记录的外部接口的信息,包括接口地址、token信息,密钥等。
以下几个都是外部接口请求头需要的认证,不具有普遍性,自行甄别参考哈。
headers.set("x-qys-accesstoken",appToken);
headers.set("x-qys-timestamp",timestamp.toString());
headers.set("x-qys-nonce",nonce+"");
headers.set("x-qys-signature",signature);

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4996971.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存