http post 调用 远程服务器的jar

场景:

我需要实现的是solr配置文件的自动生成(即本地给了文件和文件名,服务器要获取到文件并按规则生成)

思路

文件生成是考虑直接部署在服务器上,所以写一个java程序用来接受文件,开始创建文件
本地使用http的方式去调用服务器上的java程序,并写入文件

代码

服务器上的jar(生成文件代码)

 public static void makeConfig(MultipartFile[] files, String coreName) throws IOException {

        File coreHomeFile = new File("/data/engine/solr-7.7.3/server/solr/" + coreName);
        File coreConfFile = new File(coreHomeFile + "/conf");
        File coreLangFile = new File(coreConfFile + "/lang");
        //构建
        if (!(coreLangFile.exists())) {
            System.out.println("文件不存在开始创建文件夹");
            coreLangFile.mkdirs();
        }
        for (MultipartFile file : files) {
            if (Objects.equals(file.getOriginalFilename(), "managed-schema") || Objects.equals(file.getOriginalFilename(), "params.json") || Objects.equals(file.getOriginalFilename(), "protwords.txt") || Objects.equals(file.getOriginalFilename(), "solrconfig.xml") || Objects.equals(file.getOriginalFilename(), "stopwords.txt") || Objects.equals(file.getOriginalFilename(), "synonyms.txt")) {

                InputStream inputStream = file.getInputStream();
                System.out.println("11:"+coreConfFile + "/" + file.getOriginalFilename());
                BufferedOutputStream outputStream = FileUtil.getOutputStream(coreConfFile + "/" + file.getOriginalFilename());
                IoUtil.copy(inputStream,outputStream,IoUtil.DEFAULT_BUFFER_SIZE);

            }else {
                System.out.println("开始下载:"+file.getOriginalFilename());
                InputStream inputStream = file.getInputStream();
                System.out.println("11:"+coreLangFile + "/" + file.getOriginalFilename());
                BufferedOutputStream outputStream = FileUtil.getOutputStream(coreLangFile + "/" + file.getOriginalFilename());
                IoUtil.copy(inputStream,outputStream,IoUtil.DEFAULT_BUFFER_SIZE);
            }

        }
        System.out.println("下载完成");

    }
@PostMapping("/make")
    public void make(@RequestParam("files") MultipartFile[] files, String coreName) throws IOException {
        FileUtils.makeConfig(files, coreName);
    }

本地代码(访问服务器jar的代码)

 @PostMapping("/io")
    public void io(@RequestParam MultipartFile[] files, String coreName) throws IOException {
        HttpUtils.testGenMakeConfig(files,coreName);
    }
public static void testGenMakeConfig(MultipartFile[] files,String coreName) throws IOException {

        CloseableHttpClient httpClient = HttpClientBuilder.create().build();

//        HttpPost httpPost = new HttpPost("http://localhost:8081/make");
        HttpPost httpPost = new HttpPost("http://192.168.*.*:9998/make");

        CloseableHttpResponse response = null;
        MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
        for (MultipartFile file : files) {
            System.out.println("fileName:"+file.getOriginalFilename());
            multipartEntityBuilder.addBinaryBody("files",file.getInputStream(),ContentType.DEFAULT_BINARY,file.getOriginalFilename());
        }

        ContentType contentType = ContentType.create("text/plain", StandardCharsets.UTF_8);
        multipartEntityBuilder.addTextBody("coreName", "test-demo", contentType);

        HttpEntity httpEntity = multipartEntityBuilder.build();
        httpPost.setEntity(httpEntity);
        response = httpClient.execute(httpPost);
        HttpEntity responseEntity = response.getEntity();
        System.out.println("HTTPS响应状态为:" + response.getStatusLine());
        if (responseEntity != null) {
            System.out.println("HTTPS响应内容长度为:" + responseEntity.getContentLength());
            // 主动设置编码,来防止响应乱码
            String responseStr = EntityUtils.toString(responseEntity, StandardCharsets.UTF_8);
            System.out.println("HTTPS响应内容为:" + responseStr);
        }

    }

PS:
multipartEntityBuilder.addBinaryBody(“files”,file.getInputStream(),ContentType.DEFAULT_BINARY,file.getOriginalFilename());
这个方法的后两个参数一定要写,虽然不写不会报错,但是文件在服务器上会接收不到

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值