阿里云的最も安価なサーバーを租用し、ストレージ容量は40GB程度である。静的なリソースと動的なリソースを同一のサーバーに配置しているが、ストレージ容量の制約から、七牛云ストレージを活用することにした。七牛云ストレージは本人確認完了時点で10GBの無料ストレージが提供されるため、静的リソースの外部保管先として適している。
初期設定手順
七牛云ストレージを利用するには、まずアカウント登録と本人確認を完了させる必要がある。その後、専用のストレージバケットを作成する。これら基本的な設定が、SDK利用の前提条件となる。
SDK初期化と認証情報の取得
七牛云ストレージのSDKを使用するには、認証情報としてAccessKeyとSecretKeyが必要となる。これらの情報は、七牛云コンソールの「個人センター」→「密钥管理」から取得可能である。
Java SDKを使用する場合、以下のMaven依存関係をpom.xmlに追加する。
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>7.2.11</version>
</dependency>
アップロードトークンの生成はサーバーサイドで実行する必要がある。以下のコードは、認証オブジェクトを作成し、アップロードトークンを取得する処理である。
String accessKey = "your-access-key";
String secretKey = "your-secret-key";
String bucketName = "storage-bucket-name";
Auth auth = Auth.create(accessKey, secretKey);
String uploadToken = auth.uploadToken(bucketName);
System.out.println(uploadToken);
生成されたuploadTokenは、セキュリティ上の理由からクライアントには直接送信せず、必要に応じてAPIなどを通じて安全な 방법으로伝達する。
フロントエンドでのアップロード実装
クライアントサイドでは、七牛云 JavaScript SDKを使用してファイルをアップロードする。まず、SDKのスクリプトを読み込む。
<script src="https://unpkg.com/qiniu-js/dist/qiniu.min.js"></script>
以下のコードは、ファイルアップロードの基本的な実装例である。引数として、アップロード対象のファイル、ファイル名(キー)、サーバーから取得したトークン、拡張設定、設定オブジェクトを渡す。
const fileObject = document.getElementById('fileInput').files[0];
const fileKey = 'uploads/' + fileObject.name;
const authenticationToken = uploadTokenFromServer;
const extraParameters = {};
const uploadConfiguration = {};
const uploadObserver = qiniu.upload(fileObject, fileKey, authenticationToken, extraParameters, uploadConfiguration);
uploadObserver.subscribe({
next(response) {
console.log('Upload progress:', response.total.percent + '%');
},
error(error) {
console.error('Upload failed:', error);
},
complete(response) {
console.log('Upload completed:', response);
}
});
subscribeメソッドには、アップロード進行中の処理、エラー処理、完了時処理をそれぞれ定義する。total.percentプロパティを使用することで、リアルタイムでアップロード進捗を取得できる。
アップロード済みファイルの取得
バケットに格納されたファイルは、URLを通じてアクセス可能である。ファイルのURLは、以下の構成要素から成る。
URL形式は「プロトコル://ドメイン名/ファイルキー」となる。プロトコルはHTTPとHTTPSから選択可能である。ドメインについては、七牛云から自動割り当てされるドメインを使用できるが、永続的な利用を目的とする場合は独自ドメインの設定を検討すべきである。ファイルキーは、アップロード時に指定したkeyパラメータと一致する。
実装における注意点
ファイルアップロードの実装において、ファイル名は一意性を担保する必要がある。同じファイル名が既に存在する場合、アップロードは失敗する。必要に応じて、タイムスタンプやUUIDを組み合わせてファイル名を生成することを推奨する。
SDKの初期設定や認証情報の管理は、セキュリティ上の重要性を理解した上で実装する必要がある。特に、SecretKeyは絶対にクライアントサイドに露出させないこと。