2017-02-04 8 views
1

У меня есть приложение для приложений. Я хочу использовать 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: Эти шаги я последовал:

  1. У меня есть простое приложение рабочего JSP пример - как devserver и развернутая версия работают нормально
  2. DataStore работает - вставить/обновить/удалить
  3. я добавил пример код для Cloud Storage следующего this tutorial
  4. я следовал this tutorial для установки GCloud SDK и делать инициализации и настройки по умолчанию Авт
+0

показать нам, что вы пробовали, основываясь на официальных документах. –

+0

@ZigMandel У меня уже есть приложение JSP, работающее в приложении. Я создал тестовый сервлет для тестирования облачного хранилища. Я просто хочу записать несколько байтов в тестовый файл. Я добавил код сервлета в вопрос сейчас. – Teddy

ответ

1

Appengine проектов уже аутентификацию с их ведрами. Дополнительной проверки подлинности не требуется - после создания ведра по https://cloud.google.com/appengine/docs/java/googlecloudstorageclient/setting-up-cloud-storage.

Затем вы можете использовать ковш в соответствии с этими документами или blobstore https://cloud.google.com/appengine/docs/java/blobstore/.

+0

Я прошел через вашу первую ссылку. Возможно, проблема связана с локальным развертыванием. Я запускаю проект из maven следующим образом: mvn appengine: devserver Где я могу добавить этот флаг? --default_gcs_bucket_name [BUCKET_NAME] – Teddy

+0

Спасибо за это! Когда я развертываю в облаке, доступ работает автоматически. Теперь проблема только в среде разработки. – Teddy

+0

Я пробовал это ... но это тоже не сработало: mvn appengine: devserver -Ddefault_gcs_bucket_name = abcxyz.appsopt.com – Teddy

Смежные вопросы