使用Apache FileUtils从Jenkins下载54MB文件仅完成9%的问题求助
解决Apache Commons IO下载文件不完整的问题
可能的原因及对应解决建议
确认Jenkins资源URL有效性
先手动在浏览器打开remoteURL,检查下载的文件大小是否为54MB。Jenkins部分构建页面的链接可能指向资源摘要页而非实际jar包,若手动下载也不完整,说明URL本身有误,需重新获取正确的jar包下载地址。自定义URLConnection处理请求头
Jenkins可能要求特定请求头(如权限验证的Authorization、禁用压缩的Accept-Encoding),缺失时服务器可能返回截断内容。可替换FileUtils.copyURLToFile,手动构建连接处理:File dumpFile = new File(local_file_location); URL url = new URL(remoteURL); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 若Jenkins需权限验证,添加Basic Auth头(替换为你的用户名和API Token) // String auth = Base64.getEncoder().encodeToString("username:api_token".getBytes()); // conn.setRequestProperty("Authorization", "Basic " + auth); conn.setRequestProperty("Accept-Encoding", "identity"); // 禁用响应压缩 conn.setConnectTimeout(300000); conn.setReadTimeout(300000); try (InputStream in = conn.getInputStream(); OutputStream out = new FileOutputStream(dumpFile)) { byte[] buffer = new byte[8192]; int bytesRead; while ((bytesRead = in.read(buffer)) != -1) { out.write(buffer, 0, bytesRead); } } finally { conn.disconnect(); }校验文件完整性
对比本地文件与Jenkins服务器上jar包的MD5/SHA哈希值,若不一致则说明传输过程中数据丢失,需排查传输环节问题。优化超时与重试机制
尽管已设置5分钟超时,若Jenkins服务器响应过慢仍可能触发中断。可适当延长超时时间,或添加重试逻辑:下载失败后自动重试2-3次,避免单次网络波动导致的不完整。排查网络环境问题
用curl/wget命令在同一网络下下载文件,验证是否能完整获取:curl -O remoteURL若命令行下载也不完整,说明问题出在网络或Jenkins服务器端;若命令行正常,则聚焦代码层面的请求处理逻辑。
内容的提问来源于stack exchange,提问作者JBoy
相关产品推荐
相关产品推荐

