2017-04-07 24 views
1

我想上傳視頻到我的服務器。我目前可以上傳圖片,但在嘗試上傳視頻時,我不知道如何處理此問題。我目前使用以下方式上傳圖片:斯威夫特3上傳視頻到服務器

at「let image」當我從相冊中選擇視頻時發生錯誤。

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

如果你拍了視頻,爲什麼你想獲得一個圖像? – rmaddy

回答

0

您可以使用Alamofire(https://github.com/Alamofire/Alamofire)文件的上傳和下載

請查看以下alamofire例子上傳文件

例1:上傳數據

let imageData = UIPNGRepresentation(image)! 

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

例2:上傳文件

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

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

例3:上傳多部分表單數據

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

這裏,我們已經上傳使用Alamofire庫視頻,請按照下面的步驟,因此您可以輕鬆上傳視頻。 第1步: - 添加擴展名並選擇視頻

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) 
    } 
} 

第2步: - 添加Alamofire庫,並設置該方法

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) 
      } 
     }) 
    }