如何上传zip包到JFrog Artifactory时自动解压到指定路径
问题场景
本地存在路径为/tmp/some-js/的目录(内含大量子文件夹),已打包为zip压缩包/tmp/some-js.zip,Artifactory目标存储路径为/npm-dev/some-js/*,原上传命令如下:
curl -u user:api-key -k -X PUT https://xxx.xx.xx.xx:8081/artifactory/npm_dev/some-js/ -T /tmp/some-js.zip
执行上传后Artifactory内实际生成路径为/npm-dev/some-js/some-js.zip/*,需要实现将some-js.zip的内容直接解压到目标路径/npm-dev/some-js下。
实现方案
通过Artifactory原生的归档自动解压能力即可实现,无需手动解压后逐文件上传,两种方式按需选择:
- 仓库全局配置(一次配置长期生效)
- 使用管理员账号登录Artifactory后台,进入仓库管理列表,找到目标
npm_dev仓库打开编辑页面 - 切换到高级配置标签页,勾选部署归档文件时自动提取选项,保存配置生效
- 直接执行原有curl上传命令即可,zip包上传完成后会被后台自动解压,包内所有内容会直接释放到指定的
/npm-dev/some-js/路径下,不会生成嵌套的zip同名目录。
说明:该能力默认支持zip、tar、tar.gz等主流压缩格式,大体积压缩包上传后解压会有几秒到几十秒的延迟,待后台任务执行完成后即可看到完整目录结构。
- 使用管理员账号登录Artifactory后台,进入仓库管理列表,找到目标
- 单次请求触发(无需修改仓库全局配置)
如果没有仓库管理员权限,或者仅需要单次上传时触发解压,可以在原curl命令中增加专用请求头,临时触发自动解压逻辑,修改后的命令如下:
增加该请求头后,本次上传的zip包会被自动解压到目标路径,不会在仓库中保留zip包本身的文件节点。curl -u user:api-key -k -H "X-Explode-Archive: true" -X PUT https://xxx.xx.xx.xx:8081/artifactory/npm_dev/some-js/ -T /tmp/some-js.zip
避坑提示
- 上传时不要在PUT请求的目标路径后拼接zip文件名,即不要将地址写为
https://xxx.xx.xx.xx:8081/artifactory/npm_dev/some-js/some-js.zip,否则解压后的文件会落在/npm-dev/some-js/some-js.zip/路径下,就是之前出现的路径嵌套问题。 - 如果打包时将外层
some-js目录整体打入压缩包,解压后会出现/npm-dev/some-js/some-js/*的双层目录结构,打包时直接进入/tmp/some-js/目录选中所有内部文件打包即可避免该问题。
内容的提问来源于stack exchange,提问作者mamol
相关产品推荐
相关产品推荐

