使用Swift从服务器下载文件

嗨,我有一堆.mp3文件,我想与NSFileManager一起使用并存储在documents文件夹中。有没有一种方法可以在线下载.mp3文件,然后将其保存到documents文件夹?这就是我正在使用的本地文件。

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")

}

回答:

编辑/更新:

import UIKit

import AVFoundation

class ViewController: UIViewController {

var player: AVPlayer!

override func viewDidLoad() {

super.viewDidLoad()

let alarm = URL(string: "https://www.ringtonemobi.com/storage/upload/user_id_1/iphone-5-alarm-2016-08-21-01-49-25.mp3")!

do {

try alarm.download(to: .documentDirectory) { url, error in

guard let url = url else { return }

self.player = AVPlayer(url: url)

self.player.play()

}

} catch {

print(error)

}

}

}


import Foundation

extension URL {

func download(to directory: FileManager.SearchPathDirectory, using fileName: String? = nil, overwrite: Bool = false, completion: @escaping (URL?, Error?) -> Void) throws {

let directory = try FileManager.default.url(for: directory, in: .userDomainMask, appropriateFor: nil, create: true)

let destination: URL

if let fileName = fileName {

destination = directory

.appendingPathComponent(fileName)

.appendingPathExtension(self.pathExtension)

} else {

destination = directory

.appendingPathComponent(lastPathComponent)

}

if !overwrite, FileManager.default.fileExists(atPath: destination.path) {

completion(destination, nil)

return

}

URLSession.shared.downloadTask(with: self) { location, _, error in

guard let location = location else {

completion(nil, error)

return

}

do {

if overwrite, FileManager.default.fileExists(atPath: destination.path) {

try FileManager.default.removeItem(at: destination)

}

try FileManager.default.moveItem(at: location, to: destination)

completion(destination, nil)

} catch {

print(error)

}

}.resume()

}

}



原始答案

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.default.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()

}

}

以上是 使用Swift从服务器下载文件 的全部内容, 来源链接: utcz.com/qa/400866.html

回到顶部