2016-10-31 5 views
2

Я пытаюсь загрузить изображение в ковш S3 AWS, я использую следующий код. но я использую его для загрузки на изображение, хранящееся в переменной или imageView.image?Загрузить изображение AWS S3 bucket in swift

let ext = "jpg" 
    let imageURL = NSBundle.mainBundle().URLForResource("imagename", withExtension: ext) 
    print("imageURL:\(imageURL)") 

    let uploadRequest = AWSS3TransferManagerUploadRequest() 
    uploadRequest.body = imageURL 
    uploadRequest.key = NSProcessInfo.processInfo().globallyUniqueString + "." + ext 
    uploadRequest.bucket = S3BucketName 
    uploadRequest.contentType = "image/" + ext 


    let transferManager = AWSS3TransferManager.defaultS3TransferManager() 
    transferManager.upload(uploadRequest).continueWithBlock { (task) -> AnyObject! in 
     if let error = task.error { 
      print("Upload failed ❌ (\(error))") 
     } 
     if let exception = task.exception { 
      print("Upload failed ❌ (\(exception))") 
     } 
     if task.result != nil { 
      let s3URL = NSURL(string: "http://s3.amazonaws.com/\(self.S3BucketName)/\(uploadRequest.key!)")! 
      print("Uploaded to:\n\(s3URL)") 
     } 
     else { 
      print("Unexpected empty result.") 
     } 
     return nil 
    } 
+0

Я не следую вашему вопросу, не могли бы вы подробнее рассказать о том, что вы пытаетесь сделать? Вы также можете взглянуть на тестовый пример https://github.com/aws/aws-sdk-ios/blob/master/AWSS3Tests/AWSS3TransferManagerTests.m#L2245 – Karthik

ответ

6

Я изменил код, попробуйте этот

let ext = "jpg" 
let imageURL = NSBundle.mainBundle().URLForResource("imagename", withExtension: ext) 
print("imageURL:\(imageURL)") 

let uploadRequest = AWSS3TransferManagerUploadRequest() 
uploadRequest.body = imageURL 
uploadRequest.key = "\(NSProcessInfo.processInfo().globallyUniqueString).\(ext)" 
uploadRequest.bucket = S3BucketName 
uploadRequest.contentType = "image/\(ext)" 


let transferManager = AWSS3TransferManager.defaultS3TransferManager() 
transferManager.upload(uploadRequest).continueWithBlock { (task) -> AnyObject! in 
if let error = task.error { 
print("Upload failed ❌ (\(error))") 
} 
if let exception = task.exception { 
print("Upload failed ❌ (\(exception))") 
} 
if task.result != nil { 
let s3URL = NSURL(string: "http://s3.amazonaws.com/\(self.S3BucketName)/\(uploadRequest.key!)")! 
print("Uploaded to:\n\(s3URL)") 
} 
else { 
print("Unexpected empty result.") 
} 
return nil 
} 

или вы можете использовать мой код ниже, чтобы загрузить на AWS s3, его работал штрафа для меня. Этот код написан на быстрых 3.

func uploadButtonPressed(_ sender: AnyObject) { 
if documentImageView.image == nil { 
    // Do something to wake up user :) 
} else { 
    let image = documentImageView.image! 
    let fileManager = FileManager.default 
    let path = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString).appendingPathComponent("\(imageName!).jpeg") 
    let imageData = UIImageJPEGRepresentation(image, 0.99) 
    fileManager.createFile(atPath: path as String, contents: imageData, attributes: nil) 

    let fileUrl = NSURL(fileURLWithPath: path) 
    var uploadRequest = AWSS3TransferManagerUploadRequest() 
    uploadRequest?.bucket = "BucketName" 
    uploadRequest?.key = "key.jpeg" 
    uploadRequest?.contentType = "image/jpeg" 
    uploadRequest?.body = fileUrl as URL! 
    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 
     }) 
    } 

    let transferManager = AWSS3TransferManager.default() 
    transferManager?.upload(uploadRequest).continue(with: AWSExecutor.mainThread(), withSuccessBlock: { (taskk: AWSTask) -> Any? in 
     if taskk.error != nil { 
      // Error. 
     } else { 
      // Do something with your result. 
     } 
     return nil 
    }) 
} 
} 

Спасибо :)

+0

благодарит для прослушивания! но в строке {let imageURL = ...} как получить URL-адрес изображения в imageView.image? @Karthick –

+0

Лучше хранить выбранное изображение во временном месте и извлекать изображение оттуда. См. Еще часть моего кода от 1-й строки до 5-й строки (из let image = .... для файла fileUrl = ....), эти пять строк кода помогут вам сохранить изображение во временном месте и получить его. –

+0

Для более низкой версии быстрого ответа вы можете ссылаться на этот ответ по следующей ссылке http://stackoverflow.com/questions/35761326/ios-swift-save-image-file-to-temp-directory –

0

Это загрузки изображений с помощью AWS S3 ведра это ниже кода я реализованные загрузки изображения из галереи для загрузки

func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) 
{ 
    if(picker.sourceType == UIImagePickerControllerSourceType.PhotoLibrary) 
    { 

     selectedImageUrl = info[UIImagePickerControllerReferenceURL] as! NSURL 
     myImageViewC.image = info[UIImagePickerControllerOriginalImage] as? UIImage 
     myImageViewC.backgroundColor = UIColor.clearColor() 
     myImageViewC.contentMode = UIViewContentMode.ScaleAspectFit 
     self.dismissViewControllerAnimated(true, completion: nil) 
     startUploadingImage() 
    } 
    else if(picker.sourceType == UIImagePickerControllerSourceType.Camera) 
    { 
     myImageViewC.image = info[UIImagePickerControllerOriginalImage] as? UIImage 
     myImageViewC.backgroundColor = UIColor.clearColor() 
     myImageViewC.contentMode = UIViewContentMode.ScaleAspectFit 
     self.dismissViewControllerAnimated(true, completion: nil) 


     myActivityIndicator.startAnimating() 

     let S3BucketName = "streetsmartb2/sai" 


     let date3 = NSDate() 
     let timeInMi = "\(CLongLong((floor(date3.timeIntervalSince1970 * 1000))))" 

     let S3UploadKeyName = "File.jpg\(timeInMi)" 
     //print("value1:\(S3UploadKeyName)") 

     //settings temp location for image 
     let imageName = NSURL.fileURLWithPath(NSTemporaryDirectory() + S3UploadKeyName).lastPathComponent 
     let documentDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first! as String 
     // getting local path 
     let localPath = (documentDirectory as NSString).stringByAppendingPathComponent(imageName!) 
     //getting actual image 
     let image = info[UIImagePickerControllerOriginalImage] as! UIImage 
     //let data = UIImageJPEGRepresentation(image, 0.5) 
     let data = CreateTeamViewController().resizeImage(image) 
     data.writeToFile(localPath, atomically: true) 
     //let imageData = NSData(contentsOfFile: localPath)! 
     let photoURL = NSURL(fileURLWithPath: localPath) 
     let uploadRequest = AWSS3TransferManagerUploadRequest() 
     uploadRequest.body = photoURL 
     uploadRequest.key = S3UploadKeyName 
     uploadRequest.bucket = S3BucketName 
     uploadRequest.contentType = "image/jpeg" 

     let transferManager = AWSS3TransferManager.defaultS3TransferManager() 

     // Perform file upload 
     transferManager.upload(uploadRequest).continueWithBlock { (task) -> AnyObject! in 

      if let error = task.error { 
       print("Upload failed with error: (\(error.localizedDescription))") 
       dispatch_async(dispatch_get_main_queue()) { 
        // self.returnToAddView() 
        self.myActivityIndicator.stopAnimating() 
        CreateTeamViewController().displayAlertMessage("Error uploading Image") 
       } 
      } 
      if let exception = task.exception { 
       print("Upload failed with exception (\(exception))") 
       dispatch_async(dispatch_get_main_queue()) { 
        // self.returnToAddView() 
        self.myActivityIndicator.stopAnimating() 
        CreateTeamViewController().displayAlertMessage("Error uploading Image") 
       } 
      } 

      if task.result != nil { 
       // Remove locally stored file 
       self.remoteImageWithUrl(uploadRequest.key!) 
       let s3URL = NSURL(string: "https://s3.amazonaws.com/\(S3BucketName)/\(uploadRequest.key!)")! 
      // print("Uploaded to:\n\(s3URL)") 
       dispatch_async(dispatch_get_main_queue()) { 
        // self.returnToAddView() 
        self.myActivityIndicator.stopAnimating() 
        self.createTeamImageButton?.setImage(self.loadImage, forState: .Normal) 
        self.uploadedImageURL = (s3URL.URLString) 
        //      self.teamImageNameCreate = self.uploadedImageURL 
        //      self.createTeamImageButton.sd_setImageWithURL(NSURL(string: self.uploadedImageURL)!, forState: .Normal, placeholderImage: UIImage(named: "no_image_one.jpg")) 
        let url = NSURL.init(string: self.uploadedImageURL) 
        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)) { 
         // do some task 
         let imagedata = NSData(contentsOfURL: url!) 
         if let imageObj = UIImage.init(data: imagedata!) { 
          self.createTeamPic = imageObj 
         } 
         dispatch_async(dispatch_get_main_queue()) { 
          self.createTeamImageButton?.setImage(self.createTeamPic, forState: .Normal) 
         } 
        } 
       } 
      } 
      else { 
       // print("Unexpected empty result.") 
      } 
      return nil 
     } 
    } 
} 
0

Это последний код на основе SWIFT 4 синтаксис

Я пользуюсь кодом @Karthick Selvaraj.

Я думаю, что теперь его помощь другим разработчикам понять новый синтаксис

func uploadButtonPressed() { 
      if myimageView.image == nil { 
       // Do something to wake up user :) 
      } else { 
       let image = myimageView.image! 
       let fileManager = FileManager.default 
       let path = (NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString).appendingPathComponent("test3.jpeg") 
       let imageData = UIImageJPEGRepresentation(image, 0) 
       fileManager.createFile(atPath: path as String, contents: imageData, attributes: nil) 

       let fileUrl = NSURL(fileURLWithPath: path) 
       let uploadRequest = AWSS3TransferManagerUploadRequest() 
       uploadRequest?.bucket = "<Your Bucket Name>" 
       uploadRequest?.key = "<Image Name>" 
       uploadRequest?.contentType = "image/jpeg" 
       uploadRequest?.body = fileUrl as URL! 
       uploadRequest?.serverSideEncryption = AWSS3ServerSideEncryption.awsKms 
       uploadRequest?.uploadProgress = { (bytesSent, totalBytesSent, totalBytesExpectedToSend) -> Void in 
        DispatchQueue.main.async(execute: { 
    //     print("totalBytesSent",totalBytesSent) 
    //     print("totalBytesExpectedToSend",totalBytesExpectedToSend) 

    //     self.amountUploaded = totalBytesSent // To show the updating data status in label. 
    //     self.fileSize = totalBytesExpectedToSend 
        }) 
       } 

       let transferManager = AWSS3TransferManager.default() 
       transferManager.upload(uploadRequest!).continueWith(executor: AWSExecutor.mainThread(), block: { (task:AWSTask<AnyObject>) -> Any? in 
       if task.error != nil { 
         // Error. 
        print("error") 
        } else { 
         // Do something with your result. 
        print("No error Upload Done") 
        } 
        return nil 
       }) 
      } 
     } 

Наслаждайтесь !!!

Смежные вопросы