Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 如何使用alamofire 4.8,使用带有访问密钥的multipartFormData将文件上载到S3?_Amazon S3_Alamofire_Pre Signed Url - Fatal编程技术网

Amazon s3 如何使用alamofire 4.8,使用带有访问密钥的multipartFormData将文件上载到S3?

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

我正在尝试使用alamofire直接上传到s3(我的应用程序必须在apple watch上运行,而aws ios sdk在apple watch上不工作)。我知道我必须对url进行签名,但是在给定url的情况下,我不知道如何直接形成请求。然而,我目前的方法似乎没有这样做。我发现了几个类似的问题,这些问题似乎无法解决通过alamofire直接端到端上传到s3的问题,包括使用访问密钥和机密对url进行签名

代码
您需要使用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)
                }
            }
        )
    }
}