Name:
interface
Value:
Amplify has re-imagined the way frontend developers build fullstack applications. Develop and deploy without the hassle.
Gen1 DocsLegacy

Page updated Apr 22, 2026

ファイルのダウンロード

アプリ内の体験をさらにカスタマイズするには、Amplify Library for StorageからgetUrlまたはdownloadData APIを使用できます。

注記: ストレージAPIの転送高速化を有効にする方法については、転送高速化ドキュメントを参照してください。

URLからファイルを取得またはダウンロードする

getUrl APIを使用すると、デフォルトで900秒または15分間有効な署名付きURLを取得できます。このURLを使用して、ユーザーがクリックするためのダウンロードリンクを作成できます。expiresAtプロパティはURLが期限切れになる時間を表すDateオブジェクトです。

let url = try await Amplify.Storage.getURL(
path: .fromString("public/example/path")
)
print("完了: \(url)")

ファイルの存在を確認

ダウンロード可能なURLを作成する場合、AWSStorageGetURLOptionsvalidateObjectExistencetrueに設定することで、ファイルが存在するかどうかを確認することができます。ファイルにアクセスできないか存在しない場合、StorageErrorがスローされます。これにより、署名付きURLを生成するときにオブジェクトが存在するかどうかをチェックでき、その後、そのオブジェクトをダウンロードするために使用できます。

let url = try await Amplify.Storage.getURL(
path: .fromString("public/example/path"),
options: .init(
pluginOptions: AWSStorageGetURLOptions(
validateObjectExistence: true
)
)
)

すべてのgetURLオプション

オプションタイプデフォルト説明
expiresInt18000URLが期限切れになるまでの秒数
bucketStorageBucketAmplify設定のデフォルトバケットオブジェクトが保存されているバケット
pluginOptions.methodStorageAccessMethod.get.getはダウンロードURLを生成します。.putはアップロードURLを生成します。
pluginOptions.validateObjectExistenceBoolfalseURLを生成する前にオブジェクトが存在するかどうかをチェックするかどうか。メソッドが.putの場合はスキップされます。

method: .putgetURLを使用して、ファイルをS3に直接アップロードするための署名付きURLを生成することもできます。詳細は署名付きURLを使用したアップロードを参照してください。

ファイルのダウンロード

ローカルファイルへのダウンロード

downloadFile APIを使用してファイルをクライアント上にローカルにダウンロードします。

URLファイルにダウンロードできます (via Amplify.Storage.downloadFile):

let downloadToFileUrl = FileManager.default.urls(
for: .documentDirectory,
in: .userDomainMask
)[0].appendingPathComponent("myFile.txt")
let downloadTask = Amplify.Storage.downloadFile(
path: .fromString("public/example/path"),
local: downloadToFileUrl,
options: nil
)
Task {
for await progress in await downloadTask.progress {
print("進捗: \(progress)")
}
}
try await downloadTask.value
print("完了")
let downloadToFileUrl = FileManager.default.urls(
for: .documentDirectory,
in: .userDomainMask
)[0].appendingPathComponent("myFile.txt")
let downloadTask = Amplify.Storage.downloadFile(
path: .fromString("public/example/path"),
local: downloadToFileUrl,
options: nil
)
let progressSink = downloadTask
.inProcessPublisher
.sink { progress in
print("進捗: \(progress)")
}
let resultSink = downloadTask
.resultPublisher
.sink {
if case let .failure(storageError) = $0 {
print("失敗: \(storageError.errorDescription). \(storageError.recoverySuggestion)")
}
}
receiveValue: {
print("完了")
}

メモリ内データへのダウンロード

Dataオブジェクトのメモリ内バッファにダウンロードできます (Amplify.Storage.downloadData経由):

let downloadTask = Amplify.Storage.downloadData(
path: .fromString("public/example/path")
)
Task {
for await progress in await downloadTask.progress {
print("進捗: \(progress)")
}
}
let data = try await downloadTask.value
print("完了: \(data)")
let downloadTask = Amplify.Storage.downloadData(
path: .fromString("public/example/path")
)
let progressSink = downloadTask
.inProcessPublisher
.sink { progress in
print("進捗: \(progress)")
}
let resultSink = downloadTask
.resultPublisher
.sink {
if case let .failure(storageError) = $0 {
print("失敗: \(storageError.errorDescription). \(storageError.recoverySuggestion)")
}
}
receiveValue: { data in
print("完了: \(data)")
}

指定されたバケットからのダウンロード

bucketオプションを指定して、特定のバケットからダウンロード操作を実行することもできます。

.fromOutputs(name:)を使用して、Amplify Backendで割り当てられたターゲットバケットの名前を表す文字列を指定できます。

// ファイルにダウンロード
let downloadTask = Amplify.Storage.downloadFile(
path: .fromString("public/example/path"),
local: downloadToFileUrl,
options: .init(
bucket: .fromOutputs(name: "secondBucket")
)
)
// データにダウンロード
let downloadTask = Amplify.Storage.downloadData(
path: .fromString("public/example/path"),
options: .init(
bucket: .fromOutputs(name: "secondBucket")
)
)

.fromBucketInfo(_:)を使用して、バケット名とリージョンを直接指定することもできます。

// ファイルにダウンロード
let downloadTask = Amplify.Storage.downloadFile(
path: .fromString("public/example/path"),
local: downloadToFileUrl,
options: .init(
bucket: .fromBucketInfo(.init(
bucketName: "another-bucket-name",
region: "another-bucket-region")
)
)
)
// データにダウンロード
let downloadTask = Amplify.Storage.downloadData(
path: .fromString("public/example/path"),
options: .init(
bucket: .fromBucketInfo(.init(
bucketName: "another-bucket-name",
region: "another-bucket-region")
)
)
)

ダウンロードを一時停止、再開、キャンセル

downloadDataまたはdownloadFileへの呼び出しは、実際にダウンロードを実行しているタスクへの参照を返します。

以下に示すように、タスクを一時停止してから再開するか、タスクをキャンセルできます。

downloadTask.pause()
downloadTask.resume()
downloadTask.cancel()

ダウンロードタスクは内部的にURLSessionTaskインスタンスを使用して実行されます。詳細はApple公式ドキュメントで参照できます。