将使用 Alamofire 下载的文件访问到具有未知文件名的下载目录
Posted
技术标签:
【中文标题】将使用 Alamofire 下载的文件访问到具有未知文件名的下载目录【英文标题】:Access file downloaded with Alamofire to downloadsdirectory with unknown filename 【发布时间】:2019-02-04 04:02:08 【问题描述】:我有一个用于 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】: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
。
【讨论】:
是的,我将 Bundle.main 用于我放入 xcode 项目中的文件。let file = try? String(contentsOf: URL(string: (NSSearchPathForDirectoriesInDomains(.downloadsDirectory, .userDomainMask, true)[0]))!)
是我尝试下载的文件。我会试试这个并回复你,谢谢。
如何获取我从 Alamofire.download 下载的文件的名称(或其他 Alamofire 方法?)
@GabeSpound 是的,但您需要先给出名称才能更好地进行搜索操作。查看更新的答案。以上是关于将使用 Alamofire 下载的文件访问到具有未知文件名的下载目录的主要内容,如果未能解决你的问题,请参考以下文章
使用 Alamofire 将文件保存到 .DocumentDirectory
如何使用 Alamofire 访问具有无效证书的本地 Https?