0

Я пытаюсь использовать весеннюю социальную библиотеку google с реализацией driveOperations(). Всякий раз, когда я пытаюсь загрузить файл, я получаю сообщение об ошибке. Я даже пытался скачивать общедоступные файлы без каких-либо успехов. Аутентификация работает.Как вы загружаете файл с родным социальным google?

Я попытался следующие варианты:

Resource resource = google.driveOperations().downloadFile("uniquedocidhere"); 
// another approach, no error, but getDownloadUrl() is null 
    DriveFile driveFile = google.driveOperations().getFile("uniqeidhere"); 
    google.driveOperations().downloadFile(driveFile); // 404 
// finally trying it with a file drive v2 url gives an invalid URI error 

я добавил привод к области, так что я знаю, что это не является проблемой. Мне было предложено получить доступ к диску при первоначальной аутентификации с приложением.

Входящие файлы представляют собой электронные таблицы google, но я надеялся, что они будут загружены как файлы excel. При наличии SDK для Google, это можно сделать, получив exportLinks, а затем извлекая из этого URL-адреса. В то время как весной социальная библиотека Google имеет

final Map<String, String> links = driveFile.getExportLinks(); 

Экспортные ссылки не могут быть использованы, поскольку DownloadFile не похоже на работу с URL, здесь (или, возможно, они также являются нуль).

Кто-нибудь знает, как получить файл для загрузки с помощью Spring Social google и диска? Я не нашел образец кода, который охватывает диск, только Google плюс и задачи.

В настоящее время с помощью Spring загрузки 1.3.3/Spring 4.2.5 с Spring Social Google 1.0.0 RELEASE

ответ

0

Spring социального Google не поддерживает загрузку Google Docs файлы, как они не в удобном формате. В метаданных нет свойства для загрузки файла, как это было бы для других типов файлов.

В то время как собственный SDK Google может обрабатывать загрузку экспортированных форматов, таких как Excel, CSV и PDF, весенний социальный google предоставляет только свойство getExportedLinks() для просмотра URL-адресов и типов, но не предлагает никакого способа их фактической загрузки.

Теперь я изучаю возможность либо его разветвления, либо добавления методов для вызова конечной точки экспорта диска v2 для Google или для получения токена доступа, чтобы я мог использовать файл google sdk для извлечения файлов.

__

я обнаружил, что я мог бы получить доступ к токен по телефону google.getAccessToken(), где Google создается в моей социальной конфигурации, как

@Bean 
    @Scope(value = "request", proxyMode = ScopedProxyMode.INTERFACES) 
    public Google google(final ConnectionRepository repository) { 
     final Connection<Google> connection = repository.findPrimaryConnection(Google.class); 
     if (connection == null) 
      log.debug("Google connection is null"); 
     else 
      log.debug("google connected"); 
     return connection != null ? connection.getApi() : null; 
    } 

Я тогда был в состоянии загрузить файл с это:

public class LinkedTemplate extends AbstractOAuth2ApiBinding { 
    private String accessToken; 

    public LinkedTemplate() { 
    } 

    public LinkedTemplate(String accessToken) { 
     super(accessToken); 
     this.accessToken = accessToken; 
    } 

    class ExcelConverter extends ByteArrayHttpMessageConverter { 
     public ExcelConverter() { 
      MediaType t = new MediaType("application", "vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
      this.setSupportedMediaTypes(Arrays.asList(t)); 
     } 
    } 

    public void downloadLinkedFile(final String url, final String outputPath) throws IOException { 
     //application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 
     RestTemplate template = getRestTemplate(); 
     template.setMessageConverters(Arrays.asList(new ExcelConverter())); 

     HttpHeaders headers = new HttpHeaders(); 
     headers.setAccept(Arrays.asList(new MediaType("application"))); 

     HttpEntity<String> entity = new HttpEntity<String>(headers); 

     ResponseEntity<byte[]> response = template.exchange(
       url, 
       HttpMethod.GET, entity, byte[].class, "1"); 

     if (response.getStatusCode() == HttpStatus.OK) { 
      Files.write(Paths.get(outputPath), response.getBody()); 
     } 
    } 
} 
+0

Я удивлен Spring Social Google не требует токена доступа для использования API. Я предполагаю, что существуют публичные и частные API-интерфейсы? – DavidS

+0

После того, как вы упомянули об этом, в API есть google.getAccessToken(). –

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

  • Нет связанных вопросов^_^