Ich kann ein Bild erfolgreich auf Amazon S3 hochladen, aber ich kann nicht herausfinden, wie der Fortschritt angezeigt werden soll.Upload-Fortschritt für Image Upload auf Amazon S3 mit Swift 3 und Amazon SDK anzeigen
Ich lade gerade so hoch.
import UIKit
import MapKit
import CoreData
import AWSCore
import AWSCognito
import AWSS3
import MobileCoreServices
import AWSMobileAnalytics
in meinem Upload-Button habe ich den folgenden Code ...
let myIdentityPoolId = "us-west-2:dca2beb4-9a67-etc....etc..."
let credentialsProvider:AWSCognitoCredentialsProvider = AWSCognitoCredentialsProvider(regionType: AWSRegionType.usWest2, identityPoolId: myIdentityPoolId)
let configuration = AWSServiceConfiguration(region: AWSRegionType.usWest2, credentialsProvider: credentialsProvider)
AWSServiceManager.default().defaultServiceConfiguration = configuration
self.uploadImage(filename)
Dies ist die upload Funktion ...
func uploadImage(filename:String){
print("AWS Upload Image Attempt...")
//defining bucket and upload file name
let S3BucketName: String = "distribution-tech-mobile-live"
let filepath = "\(AppDelegate.appDelegate.applicationDocumentsDirectory())/\(filename)"
let imageURL = URL(fileURLWithPath: filepath)
let S3UploadKeyName = filename //TODO: Change this later
let uploadRequest = AWSS3TransferManagerUploadRequest()
uploadRequest?.bucket = S3BucketName
uploadRequest?.key = filename
uploadRequest?.contentType = "image/jpeg"
uploadRequest?.body = imageURL
uploadRequest?.serverSideEncryption = AWSS3ServerSideEncryption.awsKms
uploadRequest?.uploadProgress = { (bytesSent, totalBytesSent, totalBytesExpectedToSend) -> Void in
DispatchQueue.main.async(execute: {
self.amountUploaded = totalBytesSent // To show the updating data status in label.
self.fileSize = totalBytesExpectedToSend
print("\(totalBytesSent)/\(totalBytesExpectedToSend)")
})
}
self.uploadCompletionHandler = { (task, error) -> Void in
DispatchQueue.main.async(execute: {
if ((error) != nil){
print("Failed with error")
print("Error: \(error!)");
}
else{
print("Sucess")
}
})
}
let transferUtility = AWSS3TransferUtility.default()
let expression = AWSS3TransferUtilityUploadExpression()
transferUtility.uploadFile(imageURL, bucket: S3BucketName, key: S3UploadKeyName, contentType: "image/jpeg", expression: expression, completionHander: uploadCompletionHandler).continue({ (task) -> AnyObject! in
if let error = task.error {
print("Error: \(error.localizedDescription)")
}
if let exception = task.exception {
print("Exception: \(exception.description)")
}
if let _ = task.result {
print("Upload Starting!")
}
return nil;
})
}
bekam ich den Code für Bild-Upload Fortschritt von Ein anderer Thread, aber die Lösung scheint nicht zu funktionieren oder ich missverstehe sie.
Upload image AWS S3 bucket in swift, und diesen Thread (Swift - AWS S3 Upload Image from Photo Library and download it). Sie haben beide zwei verschiedene Möglichkeiten dies zu tun, der letzte Link, den ich auch nicht zur Arbeit bekommen konnte.
Ich bin mir nicht sicher, was ich falsch mache.
Wo ist das Problem? Sie haben '.uploadProgress' closure, die Ihnen den Fortschritt des Hochladens bietet und Sie sogar in Ihrem Code verwenden. Fügen Sie dort einen Code Update-Fortschritt in UI hinzu und es ist fertig. – user28434
Das Problem war, dass ich zwei verschiedene Methoden zum Hochladen mische und übereinstimmte, also machte ich den Upload-Fortschritt für eine andere Art und Weise, dies zu tun und einen Upload auf eine alternative Weise auszulösen, so dass der Upload-Fortschritt nie funktioniert hat. Ich war verwirrt wegen der vielen Varianten in den Antworten zu diesem Thema. –