将文件从音乐库导出到文档目录Swift 5

问题描述

在我的应用中,我想从音乐库中导出文件并将其保存到“文档”目录中。我已经从音乐库中获取文件列表,并且获取了每个文件的网址。但是我仍然有两个问题:

  1. 我只能以“ m4a”格式导出文件,但我想以音乐库中的文件(mp3,wav,aac或其他格式)导出文件

  2. 如何使用url将文件从音乐库保存到文档目录? 我的代码现在看起来像这样:

     private func exportFile(with assetURL: URL,completionHandler: @escaping (_ fileURL: URL?,_ error: Error?) -> ()) {
         let asset = AVURLAsset(url: assetURL)
         guard let exporter = AVAssetExportSession(asset: asset,presetName: AVAssetExportPresetAppleM4A) else {
             completionHandler(nil,nil)
             return
         }
    
         let fileURL = URL(fileURLWithPath: NSTemporaryDirectory())
             .appendingPathComponent(NSUUID().uuidString)
             .appendingPathExtension("m4a")
    
         exporter.outputURL = fileURL
         exporter.outputFileType = AVFileType.m4a
    
         exporter.exportAsynchronously {
             if exporter.status == .completed {
                 completionHandler(fileURL,nil)
             } else {
                 completionHandler(nil,exporter.error)
             }
         }
    
    func downloadFile(file: MPMediaItem?,callback: @escaping () -> ()) {
         guard let file = file,let url = file.url
         else { return }
         exportFile(with: url) { fileURL,error in
             guard let fileURL = fileURL,error == nil else {
                 print(error?.localizedDescription)
                 return
             }
    
             //Here I'd like to save file to Documents dir
             print("\(fileURL)")
         }
         callback()
       }
    

解决方法

第二个问题的解决方案。

我将代码放在一种方法中,然后直接保存到Documents文件夹,而不是临时文件夹:

withContext{}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...