为了账号安全,请及时绑定邮箱和手机立即绑定

通过 AWS SDK for Go 上传到 Device Farm 的 Android

通过 AWS SDK for Go 上传到 Device Farm 的 Android

Go
www说 2021-12-07 10:35:47
我正在尝试使用 AWS SDK for Go 在 AWS Device Farm 中自动运行应用程序。但是任何使用 Go 版本 SDK 上传的应用程序都不会从“INITIALIZED”更改状态。如果我通过 AWS 控制台 Web UI 上传它们,那么一切都会好起来的。上传代码示例: func uploadApp(client *devicefarm.DeviceFarm, appType, projectArn string) string {    params := &devicefarm.CreateUploadInput{        Name:       aws.String(*appName),        ProjectArn: aws.String(projectArn),        Type:       aws.String(appType),    }    resp, err := client.CreateUpload(params)    if err != nil {        log.Fatal("Failed to upload an app because of: ", err.Error())    }    log.Println("Upload ARN:", *resp.Upload.Arn)    return *resp.Upload.Arn}作为回应,我得到了类似的信息:{  Upload: {    Arn: "arn:aws:devicefarm:us-west-2:091463382595:upload:c632e325-266b-4bda-a74d-0acec1e2a5ae/9fbbf140-e377-4de9-b7df-dd18a21b2bca",    Created: 2016-01-15 14:27:31 +0000 UTC,    Name: "app-debug-unaligned.apk",    Status: "INITIALIZED",    Type: "ANDROID_APP",    Url: "bla-bla-bla"  }}时间状态永远不会从“初始化”改变。正如我所提到的,从 UI 调度运行的应用程序运行良好。如何找出原因?========================================解决方案:1) 在CreateUpload响应中需要使用预签名的 S3 链接上传文件后2) 上传应通过 HTTP PUT 请求通过接收到的 URL 执行,文件内容在正文中3)&devicefarm.CreateUploadInput应指定ContentType参数。对于 PUT 请求,Content-Type应使用相同的标头值4) 如果 PUT 请求将从 Go 代码发送,Content-Length则应手动设置标头
查看完整描述

1 回答

?
慕侠2389804

TA贡献1719条经验 获得超6个赞

当您调用 CreateUpload API 时,Device Farm 将返回一个包含“Url”字段的“上传”响应。


{

  Upload: {

    Arn: "arn:aws:devicefarm:us-west-2:....",

    Created: 2016-01-15 14:27:31 +0000 UTC,

    Name: "app-name.apk",

    Status: "INITIALIZED",

    Type: "ANDROID_APP",

    Url: "bla-bla-bla"

  }

}


返回的网址“bla-bla-bla”是一个预签名的 S3 网址,供您上传应用程序。有关使用预签名 url 上传对象的文档:http : //docs.aws.amazon.com/AmazonS3/latest/dev/PresignedUrlUploadObject.html


上传您的应用程序后,将处理该应用程序。您上传的状态将更改为“处理中”和“成功”(如果出现问题,则为“失败”)。一旦它处于“成功”状态,您就可以使用它来安排运行。


查看完整回答
反对 回复 2021-12-07
  • 1 回答
  • 0 关注
  • 185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信