Swift - массив видеофайлов сохраняется в галерее приложения нормально, но неправильно в каталоге документов приложения - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь сохранить массив видео с помощью цикла 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 Ответ

0 голосов
/ 20 сентября 2018

Похоже, проблема в этих строках.

let fileName = String(self.videoURL)
let filePath = "\(documentsPath + "/ImportVideo")" + fileName

Вы в основном перезаписываете свое видео тем же fileName, потому что каждый раз, когда требуется какая-то глобальная переменная области действия self.videoURL, которую я нигде не вижу в цепочке.Попробуйте создать уникальное имя файла для разных видео, например, используя UUID string

let fileName = UUID().uuidString

...