2014-12-18 14 views
6

Witam Mam całą masę plików .mp3, których chcę używać z NSFileManager i przechowywać w folderze dokumentów. Czy istnieje sposób, w jaki mogę pobrać pliki .mp3 przez Internet, a następnie zapisać je w folderze dokumentów? Właśnie tego używam dla pliku lokalnego.Pobierz plik z serwera za pomocą 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

Jak określić pliki, które chcesz pobrać? –

+0

@ThomasKilian Dobrze lokalnie, możesz zrobić fileForCopy = NSBundle.mainBundle(). PathForResource ("Uwaga", ofType: "mp3") –

+0

@ThomasKilian Ale co, jeśli mam adres URL i chcę go pobrać? –

Odpowiedz

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

To jest, jeśli chcę użyć lokalnego pliku. Już wiem, jak to zrobić. Zastanawiam się, jak mogę pobrać .mp3 za pośrednictwem linku i zapisać go w folderze pobierania. –

+0

Jesteś niesamowitym kolesiem! Dokładnie to, czego szukałem. Tylko krótkie pytanie, co jeśli miałbym wiele linków? Czy mogę po prostu rzucić je w tablicę jak? –

+0

Zapraszam do otwarcia kolejnego pytania Postaram się to rozgryźć –