You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Groovy从URL下载ZIP文件?附测试URL与代码片段

完善Groovy ZIP文件下载代码

我来帮你把这段代码补全,不仅能完成基本的ZIP下载,还会处理重定向、响应校验和异常情况,让代码更健壮:

完整实现代码

def static downloadArtifacts(String url, String filename) {
    // 递归处理重定向的辅助逻辑,处理3xx系列响应
    def handleRedirect = { String currentUrl ->
        def conn = new URL(currentUrl).openConnection()
        conn.setRequestProperty("PRIVATE-TOKEN", "xxxx")
        
        int responseCode = conn.getResponseCode()
        // 检查是否为重定向响应
        if (responseCode in 300..399) {
            String redirectUrl = conn.getHeaderField("Location")
            // 关闭当前连接的流,避免资源泄漏
            conn.inputStream?.close()
            conn.errorStream?.close()
            // 递归跟进重定向地址
            return handleRedirect(redirectUrl)
        }
        return conn
    }

    try {
        def conn = handleRedirect(url)
        
        // 校验响应是否成功(2xx系列状态码)
        if (conn.getResponseCode() >= 200 && conn.getResponseCode() < 300) {
            new File(filename).withOutputStream { out ->
                conn.inputStream.with { inp ->
                    // 完整拷贝输入流到文件输出流
                    out << inp
                    out.flush()
                }
            }
            println "✅ ZIP文件已成功下载至: ${filename}"
        } else {
            throw new IOException("❌ 下载失败,响应码: ${conn.getResponseCode()},消息: ${conn.getResponseMessage()}")
        }
    } catch (IOException e) {
        println "⚠️ 下载过程出错: ${e.message}"
        throw e // 可根据业务需求选择是否抛出异常,还是仅记录日志
    }
}

代码说明

  • 重定向处理:原代码只获取了重定向地址但未实际发起新请求,新增的handleRedirect闭包会递归跟进所有3xx重定向,确保最终连接到真实的文件地址
  • 响应校验:加入了状态码检查,只有成功的2xx响应才会写入文件,避免下载错误内容
  • 资源管理:利用Groovy的with语句自动管理流资源,重定向时手动关闭旧连接的流,防止资源泄漏
  • 异常处理:捕获IO异常并给出友好提示,同时可选择将异常抛出给调用方处理

测试调用示例

// 替换为你的目标URL和输出文件名
def targetUrl = "https://gist.github.com/daicham/5ac8461b8b49385244aa0977638c3420/archive/17a929502e6dda24d0ecfd5bb816c78a2bd5a088.zip"
def outputPath = "my_downloaded.zip"

downloadArtifacts(targetUrl, outputPath)

注意事项

  • 记得把代码中的"xxxx"替换为实际有效的PRIVATE-TOKEN(如果目标URL需要认证的话,公开Gist链接可能不需要)
  • 确保程序有写入filename指定路径的权限
  • 如果担心无限重定向,可以在handleRedirect中加入重定向次数限制(比如最多5次)

内容的提问来源于stack exchange,提问作者SP.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:40:02