カテゴリー: iOS

[Swift]Alamofireを使ってファイルをDLしてみる

はじめに

こんにちは、nukkyです。
みなさんSwiftでの通信ライブラリは何を使ってますか?
私はAlamofireを使っています、人気・実績ともにありますし情報量も多いです。
今回はそのAlamofireを使ってファイルのDLを行なっていきたいと思います。

前提条件

Xcode 9.x
iOS 11 Simulator
Swift 4.0

 

今回やること

今回はAlamofireをつかってWeb上のファイルをDLがメインになります、もしAlamofireわかんないとか、普通にAlamofireを使ってAPIにアクセスしたいという方はまた別の機会で紹介します。

 

準備

今回はCarthageを使用します。
https://github.com/Carthage/Carthage
Cartfileにこちらを記述してください。

github "Alamofire/Alamofire" ~> 4.7

そうしたら、以下のコマンドでビルドしてください。

carthage update --platform iOS

CocoaPodsを使いたい方でも大丈夫です。
Podfileに以下を追加してください。

pod 'Alamofire', '~> 4.7'

追加したらターミナルから以下のコマンドを実行してください。

pod install

 

実装

ファイルのDL
では早速ファイルをDLしていきます。

func download(fileName: String) {
    let destination: DownloadRequest.DownloadFileDestination = { _, _ in
        let documentsURL = FileManager.default.urls(for: .libraryDirectory, in: .userDomainMask)[0]
        let fileURL = documentsURL.appendingPathComponent(fileName)
        return (fileURL, [.removePreviousFile, .createIntermediateDirectories])
    }
    
    Alamofire.download("URL" + fileName, to: destination).response { response in
        if response.error == nil, let path = response.destinationURL?.path {
            print("path::::\(path)")
        } else {
            // エラー処理
        }
    }
}

まずDownloadFileDestinationを用意します、ここで指定したURLにDLしたファイルが保存されます。
returnで返しているオプションですが以下の内容になります。

.removePreviousFile – 指定されている場合、宛先URLから前のファイルを削除します。
.createIntermediateDirectories – 指定されている場合、宛先URLの中間ディレクトリを作成します。

ファイルのDLですがAlamofireのdownload関数を使用します、DLしたいファイルのURLと先ほど用意したDownloadFileDestinationを渡します。
エラーがない場合はresponseが返却された時点でファイルはDownloadFileDestinationで指定したURLで保存されています。

これだけでファイルのDLは実装完了です、とても簡単ですね!

DLしたファイルへのアクセス

DLしたファイルへのパス取得も書いておきます。
上記download関数でdata.txtをDLしていた場合、以下の処理でファイルパスが取得できます。

let documentsURL = FileManager.default.urls(for: .libraryDirectory, in: .userDomainMask)[0]
// ファイルの存在確認
if( FileManager.default.fileExists(atPath: "data.txt") ) {
    let filePath = documentsURL.appendingPathComponent("data.txt")
    // txtだしStringに変換
    do {
        let txtStr = try String(contentsOfFile: filePath,
                                encoding: String.Encoding.utf8)
    }
    catch {
        print("エラー")
    }
}

 

さいごに

ファイルのDLとか面倒かなと思ってましたがAlamofireをつかうとものすごく簡単に実装できるので、検討中の方は是非試してみてください。

しかし、ますますAlamofireが手放せなくなってきました、もしSwiftの通信ライブラリでおすすめとかありましたら教えてください!

RE:ENGINESブログ「iOS記事」まとめページはこちらから

nukky

シェア
執筆者:
nukky
タグ: Swift

最近の投稿

フロントエンドで動画デコレーション&レンダリング

はじめに 今回は、以下のように…

2週間 前

Goのクエリビルダー goqu を使ってみる

はじめに 最近携わっているとあ…

3週間 前

【Xcode15】プライバシーマニフェスト対応に備えて

はじめに こんにちは、suzu…

2か月 前

FSMを使った状態管理をGoで実装する

はじめに 一般的なアプリケーシ…

3か月 前