How to get partial file path after downloading with Alamofire?

a 夏天 提交于 2019-12-12 04:33:54

问题


I want to save the path of where I downloaded a file to my model object. Based on this StackOverflow answer, I should "only store the filename, and then combine it with the location of the documents directory on the fly". Well in my case it's the Application Support directory. I am not sure how to do this.

The full path of where the file will be downloaded is: /Library/ApplicationSupport/com.Company.DemoApp/MainFolder/myFile.jpg

/Library/Application Support/ is the part I can't save anywhere and I have to get it during runtime from FileManager.

com.Company.DemoApp/MainFolder/myFile.jpg is part of that file path that I can store in database/config files.

However I do not know how to get this path: com.Company.DemoApp/MainFolder/myFile.jpg from Alamofire after downloading it. For example, here is the code to download the file, how do I get this path?

func destination(named name: String, pathExtension: String) -> DownloadRequest.DownloadFileDestination {
        let destination: DownloadRequest.DownloadFileDestination = { _, _ in
            let appSupportDirURL = FileManager.createOrFindApplicationSupportDirectory()
            let fileURL = appSupportDirURL?.appendingPathComponent("com.Company.DemoApp/MainFolder/\(name).\(pathExtension)")
            return (fileURL!, [.removePreviousFile, .createIntermediateDirectories])
        }

        return destination
}

let finalDestination = destination(named: image.title, pathExtension: image.preview.pathExtension)

Alamofire.download(urlString, to: finalDestination).response { response in    
    if let imagePath = response.destinationURL?.path {
        /// I want to this path here: com.Company.DemoApp/MainFolder/myFile.jpg
        /// But not sure how to get it. How do I get this path?
    }
}

The problem is that Alamofire gives me the full path only: /Library/ApplicationSupport/com.Company.DemoApp/MainFolder/myFile.jpg. But I only want this part: com.Company.DemoApp/MainFolder/myFile.jpg.

Any ideas on how to get this path?

Also, Apple seems to refer to Bookmark's if you want to get a file at runtime here: Apple Docs for Bookmarks

Note this is a follow up to a previous question.

UPDATE 1

This is one way I think this could work. (Based of an answer above).

enum DataDirectory: String {
    case feed = "com.Compnay.DemoApp/MainFolder/"
}

Alamofire.download(urlString, to: finalDestination).response { response in    

  let destURL = response.destinationURL!
        /// One way to save this path is to do so like this:
        myImageObject.partialLocalPath = "\(DataDirectory.feed.rawValue)\(destURL.lastPathComponent)"
    }
}

So I am saving the part in an enum and appending the name to it once the download finishes - then I add this to my model object for saving.

Any thoughts?

来源:https://stackoverflow.com/questions/41729519/how-to-get-partial-file-path-after-downloading-with-alamofire

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!