java系列之-下载Zip文件到本地

本文记录了如何处理从第三方平台下载ZIP压缩文件到本地的过程,包括理解接口文档、设置请求头信息和下载文件到本地的步骤。通过Java的RestTemplate实现HTTP请求,将返回的流式数据保存为ZIP文件。
摘要由CSDN通过智能技术生成


前言

这两天帮忙同事看了一个问题,就是从第三方平台下载很痛压缩文件到本地,他搞了挺长时间没搞出来,为了项目的进度,就稍微花了点时间帮忙处理了一下,刚好很长时间没有做这种压缩文件的处理了,记录一下,凑足本月四篇保底文章,哈哈。


一、问题处理思路

做这个事情必须明确一下几点:

  1. 第三方提供相关文档描述没有。
  2. 确定第三方提供文档的完整性。
  3. 自身要有一定的辨识度能不能从第三方提供的文档考量文档的可行性。
  4. 确定服务器连接地址是否可以访问。
  5. 确定服务器文件下载路径。
  6. 确定合同下载参数,是否准确。
  7. 确定请求方式。
  8. 确定请求头信息。
  9. 确定返回头信息。

二、接口文档信息

在这里插入图片描述

三、文档信息分析

  1. 合同下载路径是明确的。
  2. 合同下载的ID也可以拿到。
  3. 分析请求头信息:x-qys-accesstoken、x-qys-signature、x-qys-timestamp,经沟通后还发现少了x-qys-nonce信息。
  4. 按照要求给头部信息赋值,头部信息不做过多解释,很基础的东西。
HttpHeaders headers = new HttpHeaders(); // http请求头
headers.add("x-qys-accesstoken", AppToken);
headers.add("x-qys-timestamp", String.valueOf(time));
headers.add("x-qys-nonce", String.valueOf(uuid));
headers.add("x-qys-signature", md5);
headers.add("accept", "*/*");
headers.add("connection", "Keep-Alive");
headers.add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
  1. 看返回信息发现返回的是附件,zip格式的。
  2. 这种格式的路径拼接完整在浏览器就可以直接下载。
  3. java后台接收的话接收的就是流Byte。
ResponseEntity<byte[]> response = restTemplate.exchange(
                url,
                HttpMethod.GET,
                new HttpEntity<byte[]>(headers),
                byte[].class);

四、下载Zip到本地

代码给的不是完整的,但是一眼也能看明白。

    @Test
    public void testZipUpload() throws IOException
    {
        String AppToken = "";
        String AppSecret = "";
        Date date = new Date();
        long time = date.getTime();
        UUID uuid = UUID.randomUUID();
        String md5 = this.MD5(AppToken + AppSecret + time + uuid, "UTF-8");

        String url = "http://ip:port/contract/download?contractId=";
        RestTemplate restTemplate = RestTemplateUtil.getInstance();
        HttpHeaders headers = new HttpHeaders(); // http请求头
        headers.add("x-qys-accesstoken", AppToken);
        headers.add("x-qys-timestamp", String.valueOf(time));
        headers.add("x-qys-nonce", String.valueOf(uuid));
        headers.add("x-qys-signature", md5);
        headers.add("accept", "*/*");
        headers.add("connection", "Keep-Alive");
        headers.add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

        ResponseEntity<byte[]> response = restTemplate.exchange(
                url,
                HttpMethod.GET,
                new HttpEntity<byte[]>(headers),
                byte[].class);

        InputStream inputStream = null;
        OutputStream outputStream = null;

        try {
            byte[] body = response.getBody();
            inputStream = new ByteArrayInputStream(response.getBody());
            File file = new File("C:\\Users\\ASUS\\Desktop\\文件.zip");
            if (!file.exists())
            {
                file.createNewFile();
            }
            outputStream = new FileOutputStream(file);
            int len = 0;
            byte[] buf = new byte[1024];
            while ((len = inputStream.read(buf, 0, 1024)) != -1)
            {
                outputStream.write(buf, 0, len);
            }
            outputStream.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (inputStream != null) {
                inputStream.close();
            }
            if (outputStream != null) {
                outputStream.close();
            }
        }
    }

总结

凑足四篇2020年最后一篇博客,哈哈。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值