У меня есть приложение для приложений. Я хочу использовать Cloud Storage для хранения некоторых загруженных пользователем файлов.Google Appengine Cloud Storage
Я хочу знать, как сделать простую аутентификацию для доступа к единому свободному ведру, который поставляется с каждым приложением приложения.
Мне нужно только приложение, чтобы поговорить с облачным хранилищем, и пользователю не нужно иметь никакого взаимодействия с облачным хранилищем. Каждый файл можно поместить в одну и ту же папку, и он должен быть доступен только для JVM-приложения.
Есть ли простой способ аутентификации, не проходя через Oauth2 и т. Д.? Простой доступ к серверу, если это возможно!
Редактировать: Это не так?
gcloud beta auth application-default login
Edit 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();
}
Edit 3: Эти шаги я последовал:
- У меня есть простое приложение рабочего JSP пример - как devserver и развернутая версия работают нормально
- DataStore работает - вставить/обновить/удалить
- я добавил пример код для Cloud Storage следующего this tutorial
- я следовал this tutorial для установки GCloud SDK и делать инициализации и настройки по умолчанию Авт
показать нам, что вы пробовали, основываясь на официальных документах. –
@ZigMandel У меня уже есть приложение JSP, работающее в приложении. Я создал тестовый сервлет для тестирования облачного хранилища. Я просто хочу записать несколько байтов в тестовый файл. Я добавил код сервлета в вопрос сейчас. – Teddy