已知文件的URL,打包压缩下载文件

  • 创建util类
package com.mgj.hardware.platform.api.util;

import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.UUID;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;

public class UrlFilesToZip {

    /**
     * 根据文件链接把文件以流的形式下载下来
     *
     * @param urlPath
     * @return
     */
    public byte[] getImageFromURL(String urlPath) {
        byte[] data = null;
        InputStream is = null;
        HttpURLConnection conn = null;
        try {
            URL url = new URL(urlPath);
            conn = (HttpURLConnection) url.openConnection();
            conn.setDoInput(true);
            conn.setDoOutput(true);
            conn.setRequestMethod("GET");
            conn.setConnectTimeout(6000);
            is = conn.getInputStream();
            if (conn.getResponseCode() == 200) {
                data = readInputStream(is);
            } else {
                data = null;
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (is != null) {
                    is.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
            conn.disconnect();
        }
        return data;
    }

    /**
     * 把文件流转化为并且转成字节码
     *
     * @param is
     * @return
     */
    public byte[] readInputStream(InputStream is) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int length = -1;
        try {
            while ((length = is.read(buffer)) != -1) {
                baos.write(buffer, 0, length);
            }
            baos.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
        byte[] data = baos.toByteArray();
        try {
            is.close();
            baos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return data;
    }

    /**
     * 文件集合压缩,controller调用此方法
     *
     * @param response
     * @param urls
     */
    public static void filesdown(HttpServletResponse response, List<String> urls) {
        try {
            //自定义文件名
            String zipFileName = "robotLog_" + UUID.randomUUID().toString().substring(0, 7) + ".zip";
            //控制文件名编码
            zipFileName = new String(zipFileName.getBytes(), StandardCharsets.UTF_8);
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            ZipOutputStream zos = new ZipOutputStream(bos);
            UrlFilesToZip s = new UrlFilesToZip();
            for (String oneFile : urls) {
                //剪切url后缀获取文件格式,http://mgjtest.4000750222.com/mgjtestZZALgEhyXyHM.log,如果其他url格式不一样,可以自定义获取文件格式
                String suffix = oneFile.substring(oneFile.lastIndexOf("."));
                //自定义打包文件中单个文件名
                zos.putNextEntry(new ZipEntry(System.currentTimeMillis() + suffix));
                //调用上面的方法,获取二进制文件
                byte[] bytes = s.getImageFromURL(oneFile);
                zos.write(bytes, 0, bytes.length);
                zos.closeEntry();
            }
            zos.close();
            // 设置强制下载不打开
            response.setContentType("application/force-download");
            response.setCharacterEncoding("UTF-8");
            // inline在浏览器中直接显示,不提示用户下载
            // attachment弹出对话框,提示用户进行下载保存本地
            // 默认为inline方式
            response.setHeader("Content-Disposition", "attachment;filename=" + zipFileName);
            OutputStream os = response.getOutputStream();
            os.write(bos.toByteArray());
            os.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

  • 创建controller

    /**
     * 获取机器人日志
     *
     * @param
     */
    @GetMapping("/platform/downloadLog")
    @ApiOperation(value = "获取机器人日志", notes = "获取机器人日志")
    public void downloadRobotLog(HttpServletResponse response) {
           
           #如果前端没有传过来url集合,这部分处理获取url集合代码
           
            UrlFilesToZip.filesdown(response, list);
     
    }
  • 完结
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值