Swift - Downloading video with downloadTaskWithURL

后端 未结 2 1302
无人及你
无人及你 2020-12-01 08:45

I\'m downloading a video thanks to downloadTaskWithURL and I\'m saving it to my gallery with this code :

    func saveVideoBis(fileStringURL:String){

    pr         


        
相关标签:
2条回答
  • 2020-12-01 09:08

    Please check comments through the code:

    Xcode 8 • Swift 3

    import UIKit
    import Photos
    
    class ViewController: UIViewController {
    
        func downloadVideoLinkAndCreateAsset(_ videoLink: String) {
    
            // use guard to make sure you have a valid url
            guard let videoURL = URL(string: videoLink) else { return }
    
            guard let documentsDirectoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return }
    
            // check if the file already exist at the destination folder if you don't want to download it twice
            if !FileManager.default.fileExists(atPath: documentsDirectoryURL.appendingPathComponent(videoURL.lastPathComponent).path) {
    
                // set up your download task
                URLSession.shared.downloadTask(with: videoURL) { (location, response, error) -> Void in
    
                    // use guard to unwrap your optional url
                    guard let location = location else { return }
    
                    // create a deatination url with the server response suggested file name
                    let destinationURL = documentsDirectoryURL.appendingPathComponent(response?.suggestedFilename ?? videoURL.lastPathComponent)
    
                    do {
    
                        try FileManager.default.moveItem(at: location, to: destinationURL)
    
                        PHPhotoLibrary.requestAuthorization({ (authorizationStatus: PHAuthorizationStatus) -> Void in
    
                            // check if user authorized access photos for your app
                            if authorizationStatus == .authorized {
                                PHPhotoLibrary.shared().performChanges({
                                    PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: destinationURL)}) { completed, error in
                                        if completed {
                                            print("Video asset created")
                                        } else {
                                            print(error)
                                        }
                                }
                            }
                        })
    
                    } catch { print(error) }
    
                }.resume()
    
            } else {
                print("File already exists at destination url")
            }
    
        }
    
        override func viewDidLoad() {
            super.viewDidLoad()
            downloadVideoLinkAndCreateAsset("https://www.yourdomain.com/yourmovie.mp4")
        }
    
    }
    
    0 讨论(0)
  • 2020-12-01 09:17

    If you want to download Video from URL but don't want to store it on Gallery. following code works for me...

     func createDownloadTask(videoURL: String,index: Int) {
        let downloadRequest = NSMutableURLRequest(url: URL(string: videoURL)!)
        let session = URLSession(configuration: URLSessionConfiguration.default, delegate: self, delegateQueue: OperationQueue.main)
        self.downloadTask = session.downloadTask(with: downloadRequest as URLRequest, completionHandler: { (url, response, error) in
            print("asdasd")
            if error != nil{
                if super.reachability.connection == .none{
                    self.showalert(msg: error?.localizedDescription ?? "")
                }else{
                    self.downloadTask?.resume()
                }
            }
    
            guard let documentsDirectoryURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return }
            // create a deatination url with the server response suggested file name
            let destinationURL = documentsDirectoryURL.appendingPathComponent(response?.suggestedFilename ?? "")
    
            do {
                if url != nil{
                try FileManager.default.moveItem(at: url!, to: destinationURL)
                }
    
                }
    
            } catch { print(error) }
    
        })
        self.downloadTask!.resume()
    }
    
    0 讨论(0)
提交回复
热议问题