如何通过Azure DevOps REST API获取构建制品中指定文件内容?
解决Azure DevOps获取制品内特定文件内容的问题
我明白你现在的困扰——已经拿到了构建制品压缩包的URL,但想直接获取里面的bundlesizes.json内容,却卡在了fileId这个参数上。下面我给你两种可行的解决方案:
方案一:直接通过文件路径获取内容(更简单)
其实你不需要纠结fileId,Azure DevOps提供了直接通过文件相对路径获取内容的API,步骤如下:
- 使用这个API格式:
GET https://dev.azure.com/{organization}/{project}/_apis/build/builds/{buildId}/artifacts/{artifactName}/content/{filePath}?api-version=5.0 - 替换你的参数后,请求地址应该是:
GET https://dev.azure.com/uifabric/fabricpublic/_apis/build/builds/8838/artifacts/drop/content/bundlesizes.json?api-version=5.0
直接发送这个请求,就能拿到bundlesizes.json的内容了,是不是比找fileId方便很多?
方案二:先获取fileId再调用Get File API
如果你一定要用你最初尝试的Get File API,那需要先获取目标文件的fileId:
- 获取制品的文件结构列表
调用这个API来获取drop制品下所有文件的详细信息:
这个请求会返回一个包含所有文件和文件夹的列表,每个条目里会有GET https://dev.azure.com/uifabric/fabricpublic/_apis/build/builds/8838/artifacts/drop/items?path=/&recursionLevel=Full&api-version=5.0id(就是你需要的fileId)、name、path等属性。 - 找到目标文件的
fileId
在返回的列表中,找到name为bundlesizes.json的条目,提取它的id值。 - 调用Get File API
把获取到的fileId填入你之前的请求中,比如假设fileId是12345,请求地址就是:
这样就能成功获取文件内容了。GET https://dev.azure.com/uifabric/fabricpublic/_apis/build/builds/8838/artifacts?artifactName=drop&fileId=12345&fileName=bundlesizes.json&api-version=5.0
为什么你之前的请求报错?
你之前把bundlesizes.json直接作为fileId传入,这是错误的——fileId是Azure DevOps内部为每个文件分配的唯一标识符,不是文件名,必须通过获取文件结构的API才能拿到。
内容的提问来源于stack exchange,提问作者tubby
相关产品推荐
相关产品推荐

