我有一个文档的Firebase存储链接,该链接要下载到ios设备的文档目录中,然后使用QuickLook模块从那里查看。 我可以在iOS设备上下载文档,但无法使用我提供的名称进行保存。 我想创建以下目录结构,然后将文档保存在“ doc”文件夹中。 文档/聊天/文档
以下代码是在Iphone的Document目录中创建“ / chat / doc”。 folderName
将包含“ / chat / doc”。
func createDocument(folderName: String ,completion: @escaping(Bool,String)->()){
let path = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true).first
if let documentsDirectory = path{
//
let docDirectoryPath = documentsDirectory.appending(folderName)
let fileManager = FileManager.default
if !fileManager.fileExists(atPath: docDirectoryPath) {
do {
try fileManager.createDirectory(atPath: docDirectoryPath,
withIntermediateDirectories: true,
attributes: nil)
//return path on success
completion(true,docDirectoryPath)
return
} catch {
print("Error creating folder in documents dir: \(error.localizedDescription)")
completion(false,error.localizedDescription)
return
}
}
completion(true,docDirectoryPath)
}
}
创建文件夹后,我要下载文档,并且需要存储在文档目录中新创建的文件夹中。
以下代码将下载文档。
func downloadDocument(){
createDocument(folderName: "/chat/doc") { (status, path) in
if let docURL = self.documentURL{
if status{
//folder is created now download document
let docDownloadRef = Storage.storage().reference(forURL: docURL)
//get documents metadata from firebase to get document name
docDownloadRef.getMetadata { metadata, error in
if let error = error {
// Uh-oh, an error occurred!
} else {
//get document name from metadata
if let fileName = metadata?.name{
//create file system url to store document
let docsurl = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
let myurl = docsurl.appendingPathComponent("chat/\(fileName)")
_ = docDownloadRef.write(toFile: myurl) { url, error in
if let error = error {
print(error.localizedDescription)
} else {
// Local file URL for document is returned
print("doc url \(url?.absoluteString)")
}
}
}
}
}
}else{
//folder is not created show document using online location
}
}
}
}
Ultimate goal is to achieve something like this "Documents/chat/doc/abc.doc"
但是我的代码没有使用文件名来存储文档,而是以“ Documents / chat / doc”这样的文件名存储文件,其中doc被视为文档而不是文件夹。
请帮助让我知道我做错了什么。 谢谢。
答案 0 :(得分:0)
在下一行创建url
时,这里缺少doc
文件夹的路径。
let myurl = docsurl.appendingPathComponent("chat/\(fileName)")
这将保存到chat
文件夹。您需要在创建folderName: "/chat/doc"
时传递相同的文件夹,所以它应该是
let myurl = docsurl.appendingPathComponent("chat/doc/\(fileName)")