Как скачать файл с весенним социальным гуглом?
Я пытаюсь использовать весеннюю социальную библиотеку Google с реализацией driveOperations(). Всякий раз, когда я пытаюсь загрузить файл, я получаю сообщение об ошибке. Я даже пытался загрузить общедоступные файлы безуспешно. Аутентификация работает.
Я пробовал следующие варианты:
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. С помощью google SDK это можно сделать, получив exportLinks, а затем загрузив его с этого URL. В то время как весной социальная библиотека Google имеет
final Map<String, String> links = driveFile.getExportLinks();
Ссылки на экспорт не могут быть использованы, потому что downloadFile, похоже, не работает с URL-адресами здесь (или, возможно, они также являются нулевыми).
Кто-нибудь знает как получить файл для скачивания с весеннего соц гугла и диска? Я не нашел ни одного примера кода, который охватывает диск, только Google Plus и задачи.
В настоящее время используется Spring Boot 1.3.3 / Spring 4.2.5 с Spring Social Google 1.0.0 RELEASE
1 ответ
Spring Social Google не поддерживает загрузку файлов Google Docs, поскольку они не имеют полезного формата. В метаданных нет свойства для загрузки файла, как для других типов файлов.
В то время как собственный SDK Google может обрабатывать загрузку экспортированных форматов, таких как Excel, CSV и PDF, Spring Social Google предоставляет только свойство getExportedLinks() для просмотра URL-адресов и типов, но не предлагает никакого способа их фактической загрузки.
Сейчас я изучаю возможность его разветвления и добавления методов для вызова конечной точки экспорта Google drive v2 или получения токена доступа, чтобы я мог использовать стандартный gdk 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());
}
}
}