我正在尝试将图像上传到 Aws S3 存储桶。我尝试按照教程进行操作,但收到一条错误消息:“由于协议(protocol)尚未设置而返回 ENOTCONN。”我是 swift 新手,我无法理解为什么还会发生错误。我的 S3 上传代码如下:
let uploadRequest = AWSS3TransferManagerUploadRequest()
uploadRequest?.body = url!
uploadRequest?.key = remoteFileName
uploadRequest?.bucket = S3BucketName
uploadRequest?.contentType = "image/" + ext
let transferManager = AWSS3TransferManager.default()
// Perform Upload
transferManager.upload(uploadRequest!).continueWith(block: { (task:AWSTask<AnyObject>) -> AnyObject! in
if let error = task.error{
print("error \(error.localizedDescription)")
}
if task.result != nil {
let url = AWSS3.default().configuration.endpoint.url
let publicURL = url?.appendingPathComponent((uploadRequest?.bucket!)!).appendingPathComponent((uploadRequest?.key!)!)
print("Uploaded to:\(publicURL)")
}
return nil
})
我的 S3 位于 ap-south-1 中,认知池 ID 位于 us-west-2 中。我想这就是问题所在。有没有办法解决这个问题,而无需在 us-west-2 中创建另一个存储桶。
我收到以下错误:
Best Answer-推荐答案 strong>
如果没有为身份验证设置 cognito 池,您希望存储桶策略有点像这样:注意 Principal 和 Action 值
另外,您使用 AWSS3TransferManagerUploadRequest 有什么特别的原因吗?如果该政策无法解决您的问题,您可以将以下代码用于 AWSS3TransferUtilityUploadExpression ,该代码以 block 的形式异步发送您的数据。
let expression = AWSS3TransferUtilityUploadExpression()
expression.progressBlock = progressBlock
transferUtility.uploadData(UIImagePNGRepresentation(imageNew!)!,
bucket: "bucket-name",
key: (imgName.removeWhitespace()),
contentType: "image/png",
expression: expression,
completionHandler: completionHandler).continueWith { (task) -> AnyObject! in
if let error = task.error {
print("Error: \(error.localizedDescription)")
}
if let _ = task.result {
print("Upload Starting!")
// Do something with uploadTask.
}
return nil;
}
关于ios - 返回 ENOTCONN 错误,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/47426902/
|