2017-04-07 2 views
1

J'essaie de télécharger une vidéo sur mon serveur. Je peux actuellement télécharger des images bien, mais lorsque vous essayez de télécharger une vidéo, je n'ai aucune idée sur la façon d'aborder cela. J'utilise actuellement ce qui suit pour télécharger des images:Swift 3 télécharger la vidéo sur le serveur

à "let image" Lance une erreur lorsque je sélectionne une vidéo de l'album.

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) 
{ 

    let imageUrl   = info[UIImagePickerControllerReferenceURL] as! NSURL 
    let imageName   = imageUrl.lastPathComponent 
    let documentDirectory = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first! 
    let photoURL   = NSURL(fileURLWithPath: documentDirectory) 
    let localPath   = photoURL.appendingPathComponent(imageName!) 
    let image    = info[UIImagePickerControllerOriginalImage]as! UIImage 
    let data    = UIImagePNGRepresentation(image) 
+1

Si vous avez pris une vidéo, pourquoi vous essayez d'obtenir une image? – rmaddy

Répondre

0

Vous pouvez utiliser Alamofire (https://github.com/Alamofire/Alamofire) pour le téléchargement et le téléchargement de fichier

S'il vous plaît vérifier ci-dessous des exemples de alamofire pour téléchargement du fichier

Exemple 1: Téléchargement de données

let imageData = UIPNGRepresentation(image)! 

Alamofire.upload(imageData, to: "https://httpbin.org/post").responseJSON { response in 
    debugPrint(response) 
} 

Exemple 2: Télécharger un fichier

let fileURL = Bundle.main.url(forResource: "video", withExtension: "mov") 

Alamofire.upload(fileURL, to: "https://httpbin.org/post").responseJSON { response in 
    debugPrint(response) 
} 

Exemple 3: Uploading multipart Formulaire de données

Alamofire.upload(
    multipartFormData: { multipartFormData in 
     multipartFormData.append(unicornImageURL, withName: "unicorn") 
     multipartFormData.append(rainbowImageURL, withName: "rainbow") 
    }, 
    to: "https://httpbin.org/post", 
    encodingCompletion: { encodingResult in 
     switch encodingResult { 
     case .success(let upload, _, _): 
      upload.responseJSON { response in 
       debugPrint(response) 
      } 
     case .failure(let encodingError): 
      print(encodingError) 
     } 
    } 
) 
1

ici, nous avons télécharger la vidéo en utilisant la bibliothèque Alamofire, suivez étapes ci-dessous afin que vous puissiez facilement téléchargé vidéo . Étape 1.: - ajouter l'extension et choisir la vidéo

extension UploadStatusViewController : UIImagePickerControllerDelegate,UINavigationControllerDelegate 
{ 
    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 

     if let mediaType = info[UIImagePickerControllerMediaType] as? String { 

      if mediaType == "public.movie" { 
       print("Video Selected") 
       let videoURL = info[UIImagePickerControllerMediaURL] as! URL 

       selectedVideoURL = videoURL 
       self.playVideo(videoURL) 
      } 
     } 
     dismiss(animated: true, completion: nil) 

    } 

    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 
     dismiss(animated: true, completion: nil) 
    } 
} 

Étape 2.: - et ajoutez la bibliothèque Alamofire et définir cette méthode

func callAPIForUploadVideo{ 

     ShowLoaderOnView() 
     Alamofire.upload(multipartFormData: { (multipartFormData) in 
      // code 
// here you can upload only mp4 video 
       multipartFormData.append(self.selectedVideoURL!, withName: "File1", fileName: "video.mp4", mimeType: "video/mp4") 
// here you can upload any type of video    
       //multipartFormData.append(self.selectedVideoURL!, withName: "File1") 
       multipartFormData.append(("VIDEO".data(using: String.Encoding.utf8, allowLossyConversion: false))!, withName: "Type") 

     }, to: /* Set Url Here */ , encodingCompletion: { (result) in 
      // code 
      switch result { 
      case .success(request: let upload, streamingFromDisk: _, streamFileURL: _): 
       upload.validate().responseJSON { 
        response in 
        HideLoaderOnView() 
        if response.result.isFailure { 
         debugPrint(response) 
        } else { 
         let result = response.value as! NSDictionary 
         print(result) 
        } 
       } 
      case .failure(let encodingError): 
       HideLoaderOnView() 
       NSLog((encodingError as NSError).localizedDescription) 
      } 
     }) 
    }