您好,我通过GET /organization/{organizationId}/workitems/{workitemId}这个接口获取到我的缺陷描述里面有一个image,image里是一个可下载的图片,地址是https://devops.aliyun.com/projex/api/workitem/file/url?fileIdentifier=b12d8fa1daa6b53ccabeb7a1a6,但是我直接用浏览器访问,他提示我没有session,如果这个网页登录过,是可以通过一个重定向下载的,我想问下,在阿里云 OpenAPI使用后台AKSK如何可以下载这个文件?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
要解决您提出的问题,以下是详细的解答和操作步骤:
您通过 GET /organization/{organizationId}/workitems/{workitemId}
接口获取到的缺陷描述中包含一个图片链接,该链接需要登录鉴权才能访问。直接使用浏览器访问时提示缺少 session,即使使用阿里云 OpenAPI 的后台 AK/SK 也无法直接下载。
这是因为该链接本身依赖于用户的登录状态(session),而 AK/SK 并不能替代这种会话鉴权机制。
根据最新的产品更新,阿里云提供了新的接口 GetWorkitemFile
来解决此问题。以下是具体的操作步骤:
GetWorkitemFile
获取临时下载链接GetWorkitemFile
GET
/organization/{organizationId}/workitem/{workitemIdentifier}/files/{fileIdentifier}
请求参数:
organizationId
: 企业标识,可在云效访问链接中获取。workitemIdentifier
: 工作项 ID,唯一标识。fileIdentifier
: 文件唯一标识,例如 b12d8fa1daa6b53ccabeb7a1a6
。返回结果:
curl
或编程语言中的 HTTP 客户端)下载文件。GetWorkitemFile
接口时,需使用阿里云 OpenAPI 的 AK/SK 进行签名鉴权。以下是一个使用 Python 调用 GetWorkitemFile
接口并下载文件的示例代码:
import requests
# 配置 AK/SK 和请求参数
access_key_id = "your-access-key-id"
access_key_secret = "your-access-key-secret"
organization_id = "your-organization-id"
workitem_identifier = "your-workitem-id"
file_identifier = "b12d8fa1daa6b53ccabeb7a1a6"
# 构造请求 URL
url = f"https://devops.aliyun.com/api/organization/{organization_id}/workitem/{workitem_identifier}/files/{file_identifier}"
# 使用 AK/SK 签名(此处省略签名逻辑,可参考阿里云 OpenAPI 文档)
headers = {
"Authorization": "Bearer your-signed-token", # 替换为实际签名后的 token
}
# 发起请求获取临时下载链接
response = requests.get(url, headers=headers)
if response.status_code == 200:
download_url = response.json().get("downloadUrl") # 假设返回字段为 downloadUrl
print(f"临时下载链接: {download_url}")
# 下载文件
file_response = requests.get(download_url)
if file_response.status_code == 200:
with open("downloaded_file.jpg", "wb") as f:
f.write(file_response.content)
print("文件下载成功!")
else:
print("文件下载失败:", file_response.status_code)
else:
print("获取下载链接失败:", response.status_code, response.text)
通过使用 GetWorkitemFile
接口,您可以获取临时下载链接并完成文件下载。此方法避免了直接访问原始链接时的 session 鉴权问题。请确保您的账号具备足够的权限,并在有效期内完成下载操作。
如有其他疑问,请随时联系技术支持或查阅相关文档。