2014-12-18 12 views
6

Hallo Ich habe eine ganze Reihe von .mp3-Dateien, die ich mit NSFileManager verwenden und im Ordner Dokumente speichern möchte. Gibt es eine Möglichkeit, die .mp3-Dateien online herunterzuladen und dann im Dokumentenordner speichern zu lassen? Dies ist, was ich für eine lokale Datei verwende.Datei vom Server herunterladen mit Swift

let filemanager = NSFileManager.defaultManager() 
let documentsPath : AnyObject = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,.UserDomainMask,true)[0] 
let destinationPath:NSString = documentsPath.stringByAppendingString("/Attention.mp3") 

if (!filemanager.fileExistsAtPath(destinationPath)) { 
    var theError: NSError? 
    let fileForCopy = NSBundle.mainBundle().pathForResource("Attention",ofType:"mp3") 
    filemanager.copyItemAtPath(fileForCopy!,toPath:destinationPath, error: &theError) 

    if (theError == nil) { 
    println("The music files has been saved.") 
    } else { 
    println("Error") 
    } 
} else { 
    println("The files already exist") 
} 
+0

Wie legen Sie die Dateien, die Sie herunterladen? –

+0

@ThomasKilian Gut lokal, können Sie tun, lassen Sie FileForCopy = NSBundle.mainBundle(). PathForResource ("Achtung", OfType: "mp3") –

+0

@ThomasKilian Aber was ist, wenn ich eine URL hatte und sie von dort herunterladen wollen? –

Antwort

18

Xcode 8.3.2 • Swift 3,1

if let audioUrl = URL(string: "http://freetone.org/ring/stan/iPhone_5-Alarm.mp3") { 
    // create your document folder url 
    let documentsUrl = try! FileManager.default.url(for: .documentDirectory, in: .userDomainMask, appropriateFor: nil, create: true) 
    // your destination file url 
    let destination = documentsUrl.appendingPathComponent(audioUrl.lastPathComponent) 
    print(destination) 
    // check if it exists before downloading it 
    if FileManager().fileExists(atPath: destination.path) { 
     print("The file already exists at path") 
    } else { 
     // if the file doesn't exist 
     // just download the data from your url 
     URLSession.shared.downloadTask(with: audioUrl, completionHandler: { (location, response, error) in 
      // after downloading your data you need to save it to your destination url 
      guard 
       let httpURLResponse = response as? HTTPURLResponse, httpURLResponse.statusCode == 200, 
       let mimeType = response?.mimeType, mimeType.hasPrefix("audio"), 
       let location = location, error == nil 
       else { return } 
      do { 
       try FileManager.default.moveItem(at: location, to: destination) 
       print("file saved") 
      } catch { 
       print(error) 
      } 
     }).resume() 
    } 
} 
+0

Das ist, wenn ich eine lokale Datei verwenden möchte. Ich weiß schon, wie das geht. Ich frage mich, wie ich eine .mp3 über einen Link herunterladen und in den Download-Ordner speichern kann. –

+0

Du bist toller Typ! Genau das, was ich gesucht habe. Nur eine kurze Frage, was wäre, wenn ich mehrere Links hätte? Kann ich sie einfach in ein Array werfen, wie? –

+0

Fühlen Sie sich frei, eine andere Frage zu öffnen Ich werde versuchen, es herauszufinden –