gpt4 book ai didi

ios - Swift - 使用 downloadTaskWithURL 下载视频

转载 作者:IT王子 更新时间:2023-10-29 05:33:15 32 4
gpt4 key购买 nike

我正在使用 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 上,即使 print("Video is saved!"); 出现,视频也没有保存。你知道为什么吗?

我的控制台中也出现了该消息

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

}

关于ios - Swift - 使用 downloadTaskWithURL 下载视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35503723/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com