gpt4 book ai didi

ios - 使用 Amazon Educate 入门账户将图像上传到 S3

转载 作者:行者123 更新时间:2023-11-28 13:38:53 27 4
gpt4 key购买 nike

我只想将图像上传到 S3,但我使用的是 AWS Educate 账户,并且我尝试了 4 个小时来完成这项工作,并且对无法正常工作的问题一无所知。

因此,我已经在 AWS 控制台上设置了所有内容,并且存储桶对每个人以及美国西部北弗吉尼亚地区公开,就像它应该与 AWS Educate 账户一样。

这是我的代码:

        let accessKey = "accessKey"
let secretKey = "secretKey"
let credentialsProvider = AWSStaticCredentialsProvider(accessKey: accessKey, secretKey: secretKey)
let configuration = AWSServiceConfiguration(region: AWSRegionType.USEast1, credentialsProvider: credentialsProvider)
AWSServiceManager.default().defaultServiceConfiguration = configuration

let transferUtility = AWSS3TransferUtility.default()
let bucketname = "bucketname"
let expression = AWSS3TransferUtilityUploadExpression()

transferUtility.uploadData(jpegData, bucket: bucketname, key: "myTransferUtilityUpload.jpg", contentType: "image/jpg", expression: expression) { (task, error) in
if let error = error {
print(error.localizedDescription)
}

if let response = task.response {
print(response)
}
}

谁能告诉我我做错了什么?

我收到此错误消息:

The operation couldn’t be completed. (com.amazonaws.AWSS3TransferUtilityErrorDomain error 2.)

accessKey + secretKey 我从“欢迎使用 AWS Educate 入门账户”仪表板上的账户详细信息 + AWS CLI 获得,显然存储桶名称与我的控制台中的名称相同

编辑:

if let jpegData = image.jpegData(compressionQuality: 0.7) {

let fileManager = FileManager.default
if let documentDirectory = fileManager.urls(for: .documentDirectory,
in: .userDomainMask).first {
var sourceFolderURL = documentDirectory.appendingPathComponent("image.jpg")

do {
try jpegData.write(to: sourceFolderURL)
} catch {
print(error.localizedDescription)
completionHandler(nil)
return
}

let accessKey = "-"
let secretKey = "-"
let bucketname = "-"
let credentialsProvider = AWSStaticCredentialsProvider(accessKey: accessKey, secretKey: secretKey)
let configuration = AWSServiceConfiguration(region: AWSRegionType.USEast1, credentialsProvider: credentialsProvider)
AWSServiceManager.default().defaultServiceConfiguration = configuration


let uploadRequest = AWSS3TransferManagerUploadRequest()!
uploadRequest.body = sourceFolderURL
uploadRequest.key = "image.jpg"
uploadRequest.bucket = bucketname
uploadRequest.contentType = "image/jpeg"
uploadRequest.acl = .publicReadWrite

let transferManager = AWSS3TransferManager.default()

transferManager.upload(uploadRequest).continueWith { [weak self] (task) -> Any? in
if let error = task.error {
print("Upload failed with error: (\(error.localizedDescription))")
completionHandler(nil)
return nil
}

if task.result != nil {
let url = AWSS3.default().configuration.endpoint.url
let publicURL = url?.appendingPathComponent(uploadRequest.bucket!).appendingPathComponent(uploadRequest.key!)
if let absoluteString = publicURL?.absoluteString {
print("Uploaded to:\(absoluteString)")
completionHandler(nil)
}
}
completionHandler(nil)
return nil
}
}
}

最佳答案

我已使用以下代码将图像上传到 S3 存储桶:首先,将图像保存到一个临时目录。

func uploadImageToS3(imageName:String, completion:@escaping (Bool) -> Void) {

let accessKey = "accessKey"
let secretKey = "secretKey"

let credentialsProvider = AWSStaticCredentialsProvider(accessKey: accessKey, secretKey: secretKey)
let configuration = AWSServiceConfiguration(region:AWSRegionType.APSoutheast2, credentialsProvider:credentialsProvider)

AWSServiceManager.default().defaultServiceConfiguration = configuration

let S3BucketName = "bucketname"

let uploadRequest = AWSS3TransferManagerUploadRequest()!
uploadRequest.body = self.getImageURLWithName(imageName:imageName)
uploadRequest.key = "\(imageName)"
uploadRequest.bucket = S3BucketName
uploadRequest.contentType = "image/jpeg"

//You can specify private or public here
uploadRequest.acl = .private

let transferManager = AWSS3TransferManager.default()

transferManager.upload(uploadRequest).continueWith { [weak self] (task) -> Any? in
ProgressIndicatorHelper.hideGlobalHUD()
if let error = task.error {
print("Upload failed with error: (\(error.localizedDescription))")
completion(false)
}

if task.result != nil {
let url = AWSS3.default().configuration.endpoint.url
let publicURL = url?.appendingPathComponent(uploadRequest.bucket!).appendingPathComponent(uploadRequest.key!)
if let absoluteString = publicURL?.absoluteString {
print("Uploaded to:\(absoluteString)")
completion(true)
}
}

return nil
}
}

按照我使用的代码从 Path 获取图像:

 func getImageURLWithName(imageName:String) -> URL {
var sourceImageURL: URL!
let fileManager = FileManager.default
if let documentDirectory = fileManager.urls(for: .documentDirectory,
in: .userDomainMask).first {
var sourceFolderURL:URL!

sourceFolderURL = documentDirectory.appendingPathComponent("YourTempFolder")

sourceImageURL = sourceFolderURL.appendingPathComponent(imageName)

}
return sourceImageURL
}

希望这对您有所帮助。

此外:目前我认为您不能直接从内存中上传图像。我搜索了它。以下是相同的链接: https://github.com/aws-amplify/aws-sdk-ios/issues/42

How to upload a UIImage to S3 with AWS iOS SDK v2

如果您发现任何错误,请告诉我。

关于ios - 使用 Amazon Educate 入门账户将图像上传到 S3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56289481/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com