我正在下载一个视频,感谢downloadTaskWithURL,我用这段代码将它保存到我的画廊:
- func saveVideoBis(fileStringURL:String){
- print("saveVideoBis");
- let url = NSURL(string: fileStringURL);
- (NSURLSession.sharedSession().downloadTaskWithURL(url!) { (location:NSURL?,r:NSURLResponse?,e:NSError?) -> Void in
- let mgr = NSFileManager.defaultManager()
- let documentsPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask,true)[0];
- print(documentsPath);
- let destination = NSURL(string: NSString(format: "%@/%@",documentsPath,url!.lastPathComponent!) as String);
- print(destination);
- try? mgr.moveItemAtPath(location!.path!,toPath: destination!.path!)
- PHPhotoLibrary.requestAuthorization({ (a:PHAuthorizationStatus) -> Void in
- PHPhotoLibrary.sharedPhotoLibrary().performChanges({
- PHAssetChangeRequest.creationRequestForAssetFromVideoAtFileURL(destination!);
- }) { completed,error in
- if completed {
- print(error);
- print("Video is saved!");
- self.sendNotification();
- }
- }
- })
- }).resume()
- }
它在我的模拟器上工作得非常好,但在我的iPad上,即使打印(“视频已保存!”),视频也不会保存;出现.
你知道为什么吗?
我的控制台中也出现了该消息
Unable to create data from file (null)
解决方法
请通过以下代码检查评论:
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")
- }
- }