読者です 読者をやめる 読者になる 読者になる

google cloud storage ファイル削除 【google app engine for java】

アプリからバケット内のファイルを削除するための実装を記載します。
本投稿では実装方法のみ。アプリからGCSへのアクセスの仕組みや、ソースの解説はまた今度。

目次
①前提条件
②必要なjarを取得、ビルドパスを設定
③実装(ソース)


①前提条件
 以下の設定が行われていること。
 ・webの管理コンソールから課金設定を有効にする
  https://console.cloud.google.com/
 ・バケットを作成する
 ・作成したバケットにファイルを格納する


②必要なjarのビルドパスを設定
 1.以下のjarを取得する
 ---
 ・google-api-client-1.21.0.jar
 ・google-http-client-1.21.0.jar
 ・google-http-client-jackson2-1.21.0.jar
 ・google-api-services-storage-v1-rev88-1.22.0.jar
 ---
 ※mavenリポジトリーからダウンロード
  http://mvnrepository.com/

 2.ビルドパスを設定
  /プロジェクト名/war/WEB-INF/lib配下に配置して、
  プロジェクトを右クリック → javaのビルド・パス → jar追加をクリック
  配置したjarを選択しOK


③実装(ソース)

	// GCS ファイル削除処理
	boolean deleted;
	try {
		for (int i = 0; i < 1; i++) {
			// バケット名, xx/xx.jpeg 先頭に/は不要
			deleteFile(BUCKET_NAME, fileNames);
		}
		deleted = true; // 削除成功
	} catch (Exception e) {
		deleted = false; // 削除失敗
		e.printStackTrace();
	}
	private static void deleteFile(String bucketName, String fileName)
			throws Exception {

		Storage storage = getStorage();

		storage.objects().delete(bucketName, fileName).execute();
	}
	private static Storage getStorage() throws Exception {

		if (storage == null) {

			HttpTransport httpTransport = new NetHttpTransport();
			JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();

			List<String> scopes = new ArrayList<String>();
			scopes.add(StorageScopes.CLOUD_PLATFORM);
			scopes.add(StorageScopes.DEVSTORAGE_FULL_CONTROL);
			scopes.add(StorageScopes.DEVSTORAGE_READ_WRITE);

			GoogleCredential credential = GoogleCredential
					.getApplicationDefault();
			if (credential.createScopedRequired()) {
				credential = credential.createScoped(scopes);
			}
			storage = new Storage.Builder(httpTransport, jsonFactory, null)
					.setHttpRequestInitializer(credential)
					.setApplicationName(
							getProperties().getProperty(
									APPLICATION_NAME_PROPERTY)).build();
		}
		return storage;
	}
	private static Properties getProperties() throws Exception {

		if (properties == null) {
			properties = new Properties();
			InputStream stream = DeleteUploadedFiles.class
					.getResourceAsStream("/resources/cloudstorage.properties");
			try {
				properties.load(stream);
			} catch (IOException e) {
				throw new RuntimeException(
						"cloudstorage.properties must be present in classpath",
						e);
			} finally {
				stream.close();
			}
		}
		return properties;
	}

こんな感じで出来ました。^^