Swift - 视频文件数组可以很好地保存到应用程序库,但不能正确保存到应用程序文档目录
Posted
技术标签:
【中文标题】Swift - 视频文件数组可以很好地保存到应用程序库,但不能正确保存到应用程序文档目录【英文标题】:Swift - Video file array save to app gallery fine but not properly to the app document directory 【发布时间】:2018-09-20 06:17:43 【问题描述】:我正在尝试使用 for 循环将一系列视频保存到文档目录和图库,但文档目录仅保存最后一个视频,而图库已将所有视频保存而没有问题。
任何想法如何解决这个问题?感谢您的意见!
func saveVideoToGallery(videoUrl: String)
//currently a URL placeholder
let videoMainUrl =
"https://dev.server.com/storage/sessions/0001/imports/"
let videoUrlPicked = String(videoMainUrl + videoUrl)
let mainPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0];
let folderPath = mainPath + "/ImportVideo"
var objCBool:ObjCBool = true
// Create Directory Folder if doesn't exists
let isExist = FileManager.default.fileExists(atPath: folderPath, isDirectory: &objCBool)
if !isExist
do
try FileManager.default.createDirectory(atPath: folderPath, withIntermediateDirectories: true, attributes: nil)
catch
print("error")
DispatchQueue.global(qos: .background).async
if let url = URL(string: videoUrlPicked),
let urlData = NSData(contentsOf: url)
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0];
let fileName = String(self.videoURL)
let filePath = "\(documentsPath + "/ImportVideo")" + fileName
//Save the video file to directory folder "ImportVideo"
urlData.write(toFile: filePath, atomically: true)
DispatchQueue.main.async
//Save to the gallery
phphotoLibrary.shared().performChanges(
PHAssetChangeRequest.creationRequestForAssetFromVideo(atFileURL: URL(fileURLWithPath: filePath))
) completed, error in
if completed
print("Video is saved to gallery")
循环
videoList = videoArray()
for videos in videoList
saveVideoToGallery(videoUrl: videos)
【问题讨论】:
【参考方案1】:看起来像这些行中的问题。
let fileName = String(self.videoURL)
let filePath = "\(documentsPath + "/ImportVideo")" + fileName
您基本上是用相同的fileName
覆盖您的视频,因为每次它需要一些全局范围变量self.videoURL
,我看不到任何地方的链接。尝试为不同的视频生成一个唯一的文件名,例如使用UUID
string
let fileName = UUID().uuidString
【讨论】:
谢谢 Inokey!它现在可以工作并保存在正确的文件夹中。我想我需要创建一个清单来存储原始名称。以上是关于Swift - 视频文件数组可以很好地保存到应用程序库,但不能正确保存到应用程序文档目录的主要内容,如果未能解决你的问题,请参考以下文章
Swift 5 将 AVAsset 保存到 UserDefaults