阿里云OpenAPI 这个问题怎么解决? https://aone.alibaba-inc.com/v2/project/460851/bug/53853805
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据您提供的问题链接内容,该问题的核心是关于通过阿里云 OpenAPI 下载一个需要登录鉴权的文件。以下是详细的解决方案和操作步骤:
您通过调用 GET /organization/{organizationId}/workitems/{workitemId} 接口获取到的缺陷描述中包含一个图片链接,例如:
https://devops.aliyun.com/projex/api/workitem/file/url?fileIdentifier=b12d8fa1daa6b53ccabeb7a1a6
但直接访问该链接时提示缺少会话(session),即使使用阿里云后台的 AK/SK 也无法直接下载。
根据知识库中的信息,此问题已经得到修复,产品团队提供了一个新的接口 GetWorkitemFile,用于获取工作项文件的临时下载链接。以下是具体操作步骤:
GetWorkitemFile 接口fileIdentifier 获取文件的临时下载链接。fileIdentifier:文件的唯一标识符,例如 b12d8fa1daa6b53ccabeb7a1a6。GetWorkitemFile 接口后,您将获得一个临时下载链接。curl 或编程语言中的 HTTP 库)访问该链接,即可下载文件。以下是一个基于 Go 语言的示例代码,展示如何调用 GetWorkitemFile 接口并下载文件:
package main
import (
"fmt"
"io/ioutil"
"net/http"
"os"
"github.com/alibabacloud-go/darabonba-openapi/v2/client"
"github.com/alibabacloud-go/devops-rdc-20200303/client"
)
func main() {
// 1. 设置访问凭据
config := &openapi.Config{
AccessKeyId: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"),
AccessKeySecret: os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"),
}
config.Endpoint = "devops.aliyun.com" // 替换为实际的Endpoint
// 2. 创建客户端
client, err := devops_rdc_20200303.NewClient(config)
if err != nil {
fmt.Println("创建客户端失败:", err)
return
}
// 3. 调用 GetWorkitemFile 接口
fileIdentifier := "b12d8fa1daa6b53ccabeb7a1a6" // 替换为实际的 fileIdentifier
response, err := client.GetWorkitemFile(&devops_rdc_20200303.GetWorkitemFileRequest{
FileIdentifier: &fileIdentifier,
})
if err != nil {
fmt.Println("调用接口失败:", err)
return
}
// 4. 获取临时下载链接
downloadUrl := response.Body.DownloadUrl
fmt.Println("临时下载链接:", *downloadUrl)
// 5. 下载文件
resp, err := http.Get(*downloadUrl)
if err != nil {
fmt.Println("下载文件失败:", err)
return
}
defer resp.Body.Close()
// 保存文件
data, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("读取文件内容失败:", err)
return
}
err = ioutil.WriteFile("downloaded_file.jpg", data, 0644)
if err != nil {
fmt.Println("保存文件失败:", err)
return
}
fmt.Println("文件下载成功!")
}
访问凭据安全:
ALIBABA_CLOUD_ACCESS_KEY_ID 和 ALIBABA_CLOUD_ACCESS_KEY_SECRET 已正确设置。接口权限:
GetWorkitemFile 接口的权限。临时链接有效期:
Endpoint 配置:
通过调用 GetWorkitemFile 接口获取临时下载链接,可以解决直接访问文件链接时提示缺少会话的问题。请按照上述步骤操作,并注意访问凭据的安全性和接口权限的配置。
如果您在操作过程中遇到其他问题,可以通过阿里云 OpenAPI Explorer 进行问题诊断,或参考常见问题文档排查错误。