AppEngineアプリケーションがあります。Cloud Storageを使用して、ユーザーがアップロードしたファイルを保存したいと思います。
すべてのアプリエンジンアプリケーションに付属している単一の無料バケットにアクセスするための簡単な認証を行う方法を知りたいです。
アプリケーション自体だけがクラウドストレージと通信するようにしたいので、ユーザーはクラウドストレージと対話する必要はありません。すべてのファイルは同じフォルダーに配置でき、App EngineJVMのみがアクセスできる必要があります。
Oauth2などを経由せずに認証する簡単な方法はありますか?可能であれば、単純なサーバー間アクセス。
編集:これと同じですか?
gcloud beta auth application-default login
編集2: Gcloudの上記のデフォルトの認証設定を試しました。それでも同じ例外がスローされます。
com.google.cloud.storage.StorageException: Invalid Credentials
私が使用しているテストコード:
private static Storage storage = null;
static {
storage = StorageOptions.getDefaultInstance().getService();
}
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
PrintWriter out = resp.getWriter();
out.println("Hello, world");
testCloudStorage();
}
private void testCloudStorage() throws IOException{
ByteArrayInputStream baIs = new ByteArrayInputStream("TEST FILE CONTENT".getBytes());
uploadFile("test-content.txt", baIs, "xyzabc.appspot.com");
}
/**
* Uploads a file to Google Cloud Storage to the bucket specified in the BUCKET_NAME
* environment variable, appending a timestamp to end of the uploaded filename.
*/
public String uploadFile(String fileName, InputStream inputStream, final String bucketName) throws IOException {
DateTimeFormatter dtf = DateTimeFormat.forPattern("-YYYY-MM-dd-HHmmssSSS");
DateTime dt = DateTime.now(DateTimeZone.UTC);
String dtString = dt.toString(dtf);
final String extendedFileName = fileName + dtString;
// the inputstream is closed by default, so we don't need to close it here
BlobInfo blobInfo =
storage.create(
BlobInfo
.newBuilder(bucketName, extendedFileName)
// Modify access list to allow all users with link to read file
.setAcl(new ArrayList<>(Arrays.asList(Acl.of(Acl.User.ofAllUsers(), Role.READER))))
.build(),
inputStream);
// return the public download link
return blobInfo.getMediaLink();
}
編集3:これらは私が従ったステップです:
Appengineプロジェクトは、それぞれのバケットですでに認証されています。追加の認証は必要ありません-https://cloud.google.com/appengine/docs/java/googlecloudstorageclient/setting-up-cloud-storageに従ってバケットが作成されたら。
その後、これらのドキュメントまたはblobstorehttps : //cloud.google.com/appengine/docs/java/blobstore/に従ってバケットを使用できます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加