Amazon s3 如何使用alamofire 4.8,使用带有访问密钥的multipartFormData将文件上载到S3?
我正在尝试使用alamofire直接上传到s3(我的应用程序必须在apple watch上运行,而aws ios sdk在apple watch上不工作)。我知道我必须对url进行签名,但是在给定url的情况下,我不知道如何直接形成请求。然而,我目前的方法似乎没有这样做。我发现了几个类似的问题,这些问题似乎无法解决通过alamofire直接端到端上传到s3的问题,包括使用访问密钥和机密对url进行签名 代码Amazon s3 如何使用alamofire 4.8,使用带有访问密钥的multipartFormData将文件上载到S3?,amazon-s3,alamofire,pre-signed-url,Amazon S3,Alamofire,Pre Signed Url,我正在尝试使用alamofire直接上传到s3(我的应用程序必须在apple watch上运行,而aws ios sdk在apple watch上不工作)。我知道我必须对url进行签名,但是在给定url的情况下,我不知道如何直接形成请求。然而,我目前的方法似乎没有这样做。我发现了几个类似的问题,这些问题似乎无法解决通过alamofire直接端到端上传到s3的问题,包括使用访问密钥和机密对url进行签名 代码 您需要使用AWS凭据来签署请求。有关签名方案的详情如下: 也就是说,你可能不想将AWS
您需要使用AWS凭据来签署请求。有关签名方案的详情如下: 也就是说,你可能不想将AWS creds嵌入到你的手表应用程序中。如果不推出应用程序更新,他们将很难轮换/管理 您的用户是否登录到您控制的任何类型的web服务?如果是这样的话,您可以让他们上传blob(使用经过身份验证的帖子),然后将数据放入S3。或者,您可以将您的web服务供应商提供给他们用来上传数据的用户。或者,您可以让watch应用程序使用API网关之类的东西对服务进行身份验证,然后让lambda处理程序将数据放入S3 如果您正在进行任何类型的“社交登录”(使用facebook登录、使用google登录等),您可以OAuth到IAM并获得每个用户的独特信誉。这是另一种方法,如果你想直接从应用程序中完成,而不需要维护服务
如果你同意在每个watch应用程序中嵌入相同的IAM凭据集,那么看看SigV4,但我建议看看是否有一种方法可以基于单个用户进行身份验证。这个答案中有很多很好的建议。
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)
}
}
)
}
}