我有一个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")
答案 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
。