访问用Alamofire下载的文件到文件名未知的downloads目录

时间:2019-02-04 04:02:08

标签: ios swift networking download alamofire

我有一个iOS应用程序,该应用程序使用金属渲染obj文件。我正在尝试为用户添加功能以在线插入obj文件的url并进行渲染。我正在使用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]))!)

我也相当确定我的文件检索方法不起作用,但是我不确定如何在文档目录中搜索特定文件。 我正在使用的文件在项目中以xcode中的.obj文件形式存在,而我只是使用它。

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

1 个答案:

答案 0 :(得分:0)

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