Vic*_*ral 10 amazon-s3 pre-signed-url alamofire
我试图使用alamofire直接上传到s3(我的应用程序必须在苹果手表上运行,而aws-ios-sdk在Apple手表上不起作用).我知道我必须在网址上签名,但我不知道如何直接形成网址请求.但是,我目前的做法似乎没有那种做法.我发现了几个类似的问题,似乎没有解决上传与alamofire直接到s3,端到端,包括签署一个带访问密钥和秘密的URL.
class UploadUtil
public func upload(file: URL, key: String, success: @escaping ()->()) {
let access_key = "AKIA123453435242"
let secret = "abcdefghijklmnopqrstuvwxyz"
Alamofire.upload(
multipartFormData: { multipartFormData in
multipartFormData.append(unicornImageURL, withName: "unicorn")
multipartFormData.append(rainbowImageURL, withName: "rainbow")
},
to: "https://mybucket.s3.amazonaws.com",
encodingCompletion: { encodingResult in
switch encodingResult {
case .success(let upload, _, _):
upload.responseJSON { response in
debugPrint(response)
}
case .failure(let encodingError):
print(encodingError)
}
}
)
}
}
Run Code Online (Sandbox Code Playgroud)
您需要使用您的 AWS 凭证来签署请求。有关签名方案的详细信息如下:https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html
也就是说,您可能不希望将 AWS 凭证嵌入到您的手表应用程序中。如果不推出应用程序更新,他们将很难轮换/管理。
您的用户是否登录了您控制的任何类型的 Web 服务?如果是这样,您可以让他们将 blob 上传到该位置(使用经过身份验证的 POST),然后将数据铲入 S3。或者,您可以让您的 Web 服务向用户提供预签名的 URL,供他们用来上传数据。或者,您可以使用 API Gateway 等方式让手表应用程序对服务进行身份验证,然后让 lambda 处理程序将数据放入 S3。
如果您正在进行任何类型的“社交登录”(使用 facebook 登录、使用 google 登录等),您可以对 IAM 进行 OAuth 并获得每个用户的唯一凭据。如果您想直接从应用程序执行此操作而不维护服务,这是另一种方法。
如果您同意将同一组 IAM 凭证嵌入到每个手表应用程序中,请查看 SigV4,但我建议您看看是否有一种方法可以根据个人用户进行身份验证。
| 归档时间: |
|
| 查看次数: |
278 次 |
| 最近记录: |