栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

feign及(httpclient基于https)协议文件上传、下载到文件服务器

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

feign及(httpclient基于https)协议文件上传、下载到文件服务器

功能描述:上传文件到文件服务器,返回文件在服务器地址,下载(获取)文件直接可以在浏览器拼接地址(ip:端口/返回文件在服务器地址)

一、feign上传下载

引入maven依赖

        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        

1、上传接口

@FeignClient(name = "fileUploadAPI", url = "${file.uploadPath}")
public interface FileUploadAPI {
    @PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
    String uploadImage(@RequestPart(value = "img") MultipartFile img);
}

2、下载接口

@FeignClient(name = "FileDownAPI",url = "${file.downPath}")
public interface FileDownAPI {

    @GetMapping(value = "{path}")
    Response getImage(@PathVariable("path") String path);
}

下载文件api调用 

private void downImage(String path, String parentFile) {
        Response response = fileDownAPI.getImage(path);
        Response.Body body = response.body();
        try {
            InputStream inputStream = body.asInputStream();
            BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream);

            //路劲类似格式:/images/20220719/6204bc93415ec044c50f60ad5bcc132c.png
            String[] split = path.split("\/");
            if (split.length == 4) {
                File img = new File(parentFile + "/" + split[3]);
                if (!img.exists()) {
                    img.createNewFile();
                }
                FileOutputStream fileOutputStream = new FileOutputStream(img);
                BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
                int length = 0;
                byte[] bytes = new byte[1024 * 10];
                while ((length = bufferedInputStream.read(bytes)) != -1) {
                    bufferedOutputStream.write(bytes, 0, length);
                }
                bufferedOutputStream.flush();
                bufferedOutputStream.close();
                bufferedInputStream.close();
                inputStream.close();
            } else {
                throw new RuntimeException("图片路径格式不对,必须为:***/**.jpg 格式");
            }
        } catch (IOException e) {
            logger.error(e.getMessage());
            throw new RuntimeException("获取文件失败", e);
        }
    }

这里之所以写两个接口是因为如果上传地址和下载地址不一致(端口开始就不一样)的情况

二、httpclient上传

1、http协议文件上传

private static String inputFileByHttp(String uploadUrl) throws IOException {

//        uploadUrl = "http://192.168.0.1:8080/images";
        String localFile = "docs/test.txt";
        File file = new File(localFile);
        CloseableHttpClient httpClient = HttpClients.createDefault();

        HttpPost post = new HttpPost(uploadUrl);

        MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
        multipartEntityBuilder.setCharset(Charset.forName("UTF-8"));
        //这两个都可以
//        multipartEntityBuilder.addBinaryBody("img",fileInputStream,ContentType.MULTIPART_FORM_DATA,"test.txt");
        multipartEntityBuilder.addBinaryBody("img", file);
        HttpEntity httpEntity = multipartEntityBuilder.build();
        post.setEntity(httpEntity);

        CloseableHttpResponse response = httpClient.execute(post);
        String result = "无数据返回";
        if (200 == response.getStatusLine().getStatusCode()) {
            HttpEntity entity = response.getEntity();
            if (null != entity) {
                result = EntityUtils.toString(entity, "UTF-8");
            }
            System.out.println(result);
        }
        return result;
    }

2、https协议文件上传

 private static String inputFileByHttps(String uploadUrl) throws IOException {
//        uploadUrl = "https://baidu.xx.com:10000/images";
        String localFile = "docs/test.txt";
        File file = new File(localFile);
        FileInputStream fileInputStream = new FileInputStream(file);

        CloseableHttpClient httpClient = createSSLClient();
        HttpPost post = new HttpPost(uploadUrl);

        MultipartEntityBuilder multipartEntityBuilder = MultipartEntityBuilder.create();
        multipartEntityBuilder.setCharset(Charset.forName("UTF-8"));
        //这两个都可以
        multipartEntityBuilder.addBinaryBody("img",fileInputStream,ContentType.MULTIPART_FORM_DATA,"test.txt");
//        multipartEntityBuilder.addBinaryBody("img", file);
        HttpEntity httpEntity = multipartEntityBuilder.build();
        post.setEntity(httpEntity);

        CloseableHttpResponse response = httpClient.execute(post);
        String result = "无数据返回";
        if (200 == response.getStatusLine().getStatusCode()) {
            HttpEntity entity = response.getEntity();
            if (null != entity) {
                result = EntityUtils.toString(entity, "UTF-8");
            }
            System.out.println(result);
        }
        return result;
    }

private static CloseableHttpClient createSSLClient() {
        SSLContext sslContext;
        try {
            sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
                //信任所有
                @Override
                public boolean isTrusted(X509Certificate[] xcs, String string) {
                    return true;
                }
            }).build();
            SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);

            return HttpClients.custom().setSSLSocketFactory(sslsf).build();
        } catch (KeyStoreException ex) {
            ex.printStackTrace();
        } catch (NoSuchAlgorithmException ex) {
            ex.printStackTrace();
        } catch (KeyManagementException ex) {
            ex.printStackTrace();
        }

        return HttpClients.createDefault();
    }

http和https综上代码可以看到在获取httpclient的时候有区别,https需要设置ssl信任

三、postman上面测试https协议文件上传设置

 文件key必须要正确

关闭settings设置里面的ssl证书验证,一般默认是开启的 

 

 开启settings设置里面的CA证书,默认是关闭的

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1027536.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号