Доступ к файлу, загруженному с помощью Alamofire, в директорию downloads с неизвестным именем файла - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть приложение для iOS, которое использует металл для рендеринга файлов obj.Я пытаюсь добавить функциональность для пользователей, чтобы вставить URL файла OBJ онлайн и сделать это.Я использую alamofire и не уверен, как получить доступ к файлу после загрузки, так как я не буду знать имя файла.

let destination = DownloadRequest.suggestedDownloadDestination(for: .downloadsDirectory)

let modelUrl = URL(string: "https://drive.google.com/file/d/110KRnku3N_K_EIN-ZLYXK128zjMqxGLM/view?usp=sharing")

Alamofire.download(
    modelUrl!,
    method: .get,
    parameters: Parameters.init(),
    encoding: JSONEncoding.default,
    headers: nil,
    to: destination).downloadProgress(closure: { (progress) in
        //progress closure
    }).response(completionHandler: { (DefaultDownloadResponse) in
        //here you able to access the DefaultDownloadResponse
        //result closure
    })
let file = try? String(contentsOf: URL(string: (NSSearchPathForDirectoriesInDomains(.downloadsDirectory, .userDomainMask, true)[0]))!)

Я также уверен, что мой метод получения файла не будет работать, но я не уверен, как искать каталог документов для конкретного файла.Файлы, с которыми я работаю, находятся в проекте как файлы .obj в xcode, и я просто использую это.

let assetURL = Bundle.main.url(forResource: modelName, withExtension: "obj")

1 Ответ

0 голосов
/ 04 февраля 2019

Bundle.main не будет возвращать файлы в document directory, он используется для файлов, которые вы помещаете в основной пакет (обычно внутри Xcode во время разработки).Вам необходимо использовать FileManager для доступа к файлам в document directory.Вы можете использовать эту функцию для поиска файлов в каталоге документов.

func getFilePathInDocuments(fileName:String) -> String {
    let path        = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as String
    let url         = URL(fileURLWithPath: path)
    let fileManager = FileManager.default
    let filePath    = url.appendingPathComponent(fileName).path

    if (fileManager.fileExists(atPath: filePath)) {
        return filePath
    }else{
        return ""
    }
}

Вот как вы ее называете:

let foundPath = getFilePathInDocuments(fileName: "fileName.obj")

Обновление :

Вы можете указать fileName для Almofire, и с него вы также получите загруженный URL.

let destinationPath: DownloadRequest.DownloadFileDestination = { _, _ in
    let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0];
    let fileURL = documentsURL.appendingPathComponent("fileName")
    return (fileURL, [.removePreviousFile, .createIntermediateDirectories])
}

Alamofire.download(url, to: destinationPath)
    .downloadProgress { progress in
    }
    .responseData { response in
}

Чтобы получить URL-адрес каталога загруженного документа, используйте response.destinationURL.

...