Использование API Google Диска с проектом scala play

Я пытался адаптировать краткое руководство по Java для взаимодействия с API-интерфейсом Google Drive для проекта Scala Play, однако у меня возникли проблемы с чтением файла учетных данных, он говорит, что его нет, однако я пытался:

  • Абсолютный путь
  • Путь от корня содержимого
  • Путь от исходного корня

Но ни один из них не сработал.

вот моя структура проекта: Структура проекта

Вот ошибка: Ошибка

И вот код, который я использую, чтобы попытаться прочитать файл:

import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp
import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver
import com.google.api.client.googleapis.auth.oauth2.{GoogleAuthorizationCodeFlow, GoogleClientSecrets}
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport
import com.google.api.client.http.javanet.NetHttpTransport
import com.google.api.client.json.JsonFactory
import com.google.api.client.json.jackson2.JacksonFactory
import com.google.api.client.util.store.FileDataStoreFactory
import com.google.api.services.sheets.v4.SheetsScopes

import java.io.{File, FileNotFoundException, IOException, InputStreamReader}
import java.security.GeneralSecurityException
import java.util
import java.util.Collections

class GoogleService {
 private val applicationName: String = "Google Sheets API Java Quickstart"
 private val jsonFactory: JsonFactory = JacksonFactory.getDefaultInstance()
 private val tokenDirectoryPath: String = "tokens"

 private val scopes: util.List[String] = Collections.singletonList(SheetsScopes.SPREADSHEETS_READONLY)
 private val credentialsFilePath: String = "app/assets/credentials.json"

 @throws[IOException]
 private def getCredentials(HTTP_TRANSPORT: NetHttpTransport) = { // Load client secrets.
   val in = classOf[GoogleService].getResourceAsStream(credentialsFilePath)
   if (in == null) {
     System.out.printf(credentialsFilePath)
     throw new FileNotFoundException(s"Resource not found: $credentialsFilePath")
   }
   val clientSecrets = GoogleClientSecrets.load(jsonFactory, new InputStreamReader(in))
   // Build flow and trigger user authorization request.
   val flow = new GoogleAuthorizationCodeFlow.Builder(HTTP_TRANSPORT, jsonFactory, clientSecrets, scopes).setDataStoreFactory(new FileDataStoreFactory(new File(tokenDirectoryPath))).setAccessType("offline").build
   val receiver = new LocalServerReceiver.Builder().setPort(8888).build
   new AuthorizationCodeInstalledApp(flow, receiver).authorize("user")
 }

 @throws[IOException]
 @throws[GeneralSecurityException]
 def main(args: String*
         ) {
   val httpTransport = GoogleNetHttpTransport.newTrustedTransport
   getCredentials(httpTransport)
 }
}

Какую версию Scala вы используете? Что такое test в classOf[test]?

Tomer Shetah 13.12.2020 00:19

Тест должен быть GoogleService (теперь изменено), а версия scala - 2.13.3.

DevyDev 13.12.2020 17:31
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
424
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Попробуйте заменить:

val in = classOf[GoogleService].getResourceAsStream(credentialsFilePath)

с:

val in = getClass.getResourceAsStream(credentialsFilePath)

Обратите внимание, что ресурсы обычно находятся в папке conf, и именно там их ищут. Пожалуйста, попробуйте переместить папку assets из папки app в папку conf. Затем обновите:

private val credentialsFilePath: String = "assets/credentials.json"

Решено, спасибо, решил, что странно, но абсолютный путь не работал.

DevyDev 14.12.2020 00:43

Другие вопросы по теме