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

托管对象上下文不会保存——没有错误

Alluxio - 访问 underfs 中的现有文件

使用CameraManager和Swift将捕获的视频保存到iOS库

如何将php查询的所有结果保存到.txt文件?

用swift在ios上分享资源库视频