1. はじめに
クラウドは新しい概念ではありません。明確に説明してくださいと言われても、とりあえずはインターネットに接続されているものをクラウドと呼びます。国内にはまだ多くのクラウド サービス プロバイダーがあり、1 つは Wanwang などの従来のスペース プロバイダーなどの、Alibaba Cloud に似たホスト型のクラウド プロバイダーで、もう 1 つは BAE などのアプリケーション プラットフォームです。サエ。 Alibaba Cloud などのスペース プロバイダーと比較すると、アプリケーション ホスティング プラットフォームのエントリー レベルは低く、苦労しているプログラマーの大多数にとって優れたテスト プラットフォームを提供します。
私が最近担当したソフトウェア アップグレード プログラムには、複数のプラットフォーム、複数のファイル、複数のバージョンが含まれていました。独自のファイル サーバーを構築すると、帯域幅がビジネス ニーズを満たすことができないため、Baidu Cloud Storage BCS サービスを使用し始めました。現在は正常に動作していますが、時折断続的なけいれんが発生するため、Alibaba Cloud Storage に頼らざるを得なくなりました。結局のところ、商用のものは依然として商用化され、プロフェッショナルである必要があります。Baidu Cloud Storage とは異なり、少なくとも問題が発生した場合は、顧客サービスを利用できません。見つかる。ただし、技術的な用途として、クラウド ストレージの使用について話しましょう。
2. 利用手順
1.百度アカウントを登録する
これを言う必要はありません。
2. 開発者に電話する
「Baidu Open Cloud Platform」と入力します(Baidu自体は知りません) ログイン後、開発者として登録するよう求められますので、情報を入力すればOKです。
3. アプリケーションを作成する
Baidu Open Cloud ホームページにアクセスし、BAE アプリケーション エンジンを作成します。作成するときは、まだ Web サイトを保持している場合を除き、ソリューションを選択しないでください。試してみても大丈夫です。入力後、クラウドストレージを選択し、バケットを作成します(後述)。
4.SDKをダウンロードする
5. テストコード
3. 難点と注意点
1. API が存在しない、または詳細な API が存在しない SDK は、読むのに多くのエネルギーを必要とし、他の人のブログを読むほど便利ではありません。
2. 概念の理解
バケット: アプリケーションを作成すると、バケットが作成されます。バケットとは、D ドライブを作成するのと同じように、他のバケットにも保存できるドライブ文字と考えてください。作成されます。 Bucket がドライブ文字であると言うのは実際には不正確です。ファイルを読み取るときに、私のファイルが 1.txt であるとは言えません。代わりに: /1.txt。コード内で宣言されています。
オブジェクト: オブジェクトは、多くのメタ情報とファイル ブロック (ファイル システムを参照) で構成されます。メタ情報には、ファイル名、ファイル サイズ、時刻などが含まれます。 Object を使用する前に、必ず「/」を覚えておいてください。
3. ダウンロード認証
http リクエストを使用してプライベート ファイルをダウンロードするには、認証パラメータが必要です。公式 API を読むと、認証の暗号化プロセスのみが説明されていますが、Java バージョンでは認証手順については特に説明しません。 、SDKで実装されているため、ちょっとした問題があります。バケットと SDK によって生成されたダウンロード アドレスのファイル名の間にある「/」がエンコードされているため、一部のダウンローダーがダウンロードに失敗します。たとえば、モバイル QQ はダウンロードできません。再度処理する必要があります。
4. APIキーと秘密キー
これを通じてアプリにアクセスします。
4. 詳細な実装
1. ガイドパッケージ
2. コードの一部
認可:
次のようにコードをコピーします。
パブリック クラス BCSHelper {
private String host = "";//ホスト名: bcs.duapp.com
private String accessKey = "" //作成したアプリケーションで確認できます。
プライベート文字列 SecretKey = "";
private String Bucket = "";//作成したバケットの名前
プライベート BaiduBCS baiduBCS = null;
パブリック BCSHelper() {
this.host = Configuration.getHost();
this.accessKey = Configuration.getAccessKey();
this.secretKey = Configuration.getSecretKey();
this.bucket = Configuration.getBucket();
BCSCredentials 資格情報 = 新しい BCSCredentials(accessKey, SecretKey);
baiduBCS = 新しい BaiduBCS(資格情報、ホスト);
baiduBCS.setDefaultEncoding("UTF-8"); // デフォルトの UTF-8
}
ファイルのアップロードと削除:
次のようにコードをコピーします。
/**
* ファイルをBCSにアップロード
*
* @return boolean true はアップロードが成功したことを示します
* @paramファイル
※アップロードするファイル
*
*******/
public boolean putObject(File ファイル) {
ブール値の結果 = true;
試す {
//「/」で始まる必要があります
PutObjectRequest リクエスト = new PutObjectRequest(バケット, "/" + file.getName(), file);
//オブジェクトのメタ情報を設定
ObjectMetadata メタデータ = new ObjectMetadata();
request.setMetadata(メタデータ);
baiduBCS.putObject(リクエスト);
LoggerService.addLoggerByOperate("BCS: BCS にファイルをアップロード:"+file.getName());
} catch (例外 e) {
結果 = false;
LoggerService.addLoggerByError(e.getMessage());
e.printStackTrace();
}
結果を返します。
}
/**
* BCS 上のファイルをオブジェクト名で削除します
*
* @param オブジェクト
* オブジェクト名
* @return boolean true 削除成功
* *****/
public boolean deleteObject(String object) {
ブール値の結果 = true;
試す {
if (existObject(オブジェクト)) {
baiduBCS.deleteObject(バケット, "/" + オブジェクト);
LoggerService.addLoggerByOperate("BCS: BCS 上のファイルを削除:"+object);
}
} catch (例外 e) {
結果 = false;
e.printStackTrace();
LoggerService.addLoggerByError(e.getMessage());
}
結果を返します。
}
オブジェクトが存在するかどうかを確認します。
次のようにコードをコピーします。
/**
* ファイルが BCS に存在するかどうかを確認します
*
* @param オブジェクト
* オブジェクト名
* @return boolean true は存在を示します
* ***/
public booleanexistObject(String object) {
ブール値の結果 = false;
試す {
結果 = baiduBCS.doesObjectExist(バケット, "/" + オブジェクト);
} catch (例外 e) {
e.printStackTrace();
}
結果を返します。
}
自分で書いたダウンロード アドレスを生成します。
次のようにコードをコピーします。
/**
* オブジェクトのダウンロードアドレスを取得する
*
* @param オブジェクト
* オブジェクト名
* @return String ダウンロードされた URL を返します
*******/
public String getUrl(String object) {
// 暗号化が必要なコンテンツ
文字列データ = "MBO" + "/n" + "Method=GET" + "/n" + "Bucket=" +bucket + "/n" + "Object=/" + object + "/n";
//暗号化された結果
文字列 hmacsha1 = getHmacSHA1(secretKey, data);
// 符号パラメータを構築します
文字列記号 = "MBO:" + accessKey + ":" + hmacsha1;
// URL
StringBuilder ビルダー = new StringBuilder();
builder.append("http://");
builder.append(ホスト);
builder.append("/");
builder.append(バケット);
builder.append("/");
builder.append(オブジェクト);
builder.append("?sign=);
builder.append(sign);
builder.toString() を返します。
}
// 署名の暗号化
private String getHmacSHA1(String SecretKey, String data) {
文字列結果 = "";
試す {
SecretKeySpec signedKey = new SecretKeySpec(secretKey.getBytes(), "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(署名キー);
byte[] rawHmac = mac.doFinal(data.getBytes());
Base64 Base64 = 新しい Base64();
@SuppressWarnings("静的アクセス")
byte[] enbytes =base64.encodeBase64Chunked(rawHmac);
result = new String(enbytes, "utf-8");
} catch (例外 e) {
e.printStackTrace();
}
結果を返します。
}
変更された SDK で生成されたアドレス:
次のようにコードをコピーします。
* オブジェクトのダウンロードアドレスを取得する
*
* @param オブジェクト
* オブジェクト名
* @return String ダウンロードされた URL を返します
*******/
public String getUrl(String object) {
文字列結果 = "";
GenerateUrlRequestgenerateUrlRequest = new GenerateUrlRequest(HttpMethodName.GET, バケット, "/" + オブジェクト);
generateUrlRequest.setBcsSignCondition(new BCSSignCondition());
結果 = baiduBCS.generateUrl(generateUrlRequest);
result=result.replaceFirst("%2F", "/");
結果を返します。
}
公式から提供されているテストコードもたくさんありますが、必要に応じてダウンロードして自分で調べて、カプセル化して実際のプロジェクトで使用してください。ファイルのアップロードの進捗状況を教えていただければ幸いです。結局のところ、彼も新人です。