如何使用 spring 社交 google 下载文件?
How do you download a file with spring social google?
我正在尝试将 spring 社交 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 文件。使用 stock google SDK,这可以通过获取 exportLinks 然后从 URL 中获取来完成。虽然 spring 社交 google 图书馆有
final Map<String, String> links = driveFile.getExportLinks();
无法使用导出链接,因为 downloadFile 似乎不适用于此处的 URL(或者它们也可能为空)。
有谁知道如何使用 spring 社交 google 和驱动器下载文件?我还没有找到任何涵盖驱动器的示例代码,只有 google plus 和任务。
目前正在使用 Spring Boot 1.3.3 / Spring 4.2.5 with Spring Social Google 1.0.0 RELEASE
Spring 社交 google 不支持下载 Google 文档文件,因为它们不是有用的格式。元数据上没有 属性 来下载文件,就像其他文件类型一样。
虽然 Google 自己的 SDK 可以处理 Excel、CSV 和 PDF 等导出格式的下载,但 spring social google 仅公开 getExportedLinks() 属性 查看 URL 和类型,但没有提供实际下载它们的方法。
我现在正在研究分叉它并添加调用 Google 驱动器 v2 导出端点或获取访问令牌的方法的可能性,以便我可以使用股票 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());
}
}
}
我正在尝试将 spring 社交 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 文件。使用 stock google SDK,这可以通过获取 exportLinks 然后从 URL 中获取来完成。虽然 spring 社交 google 图书馆有
final Map<String, String> links = driveFile.getExportLinks();
无法使用导出链接,因为 downloadFile 似乎不适用于此处的 URL(或者它们也可能为空)。
有谁知道如何使用 spring 社交 google 和驱动器下载文件?我还没有找到任何涵盖驱动器的示例代码,只有 google plus 和任务。
目前正在使用 Spring Boot 1.3.3 / Spring 4.2.5 with Spring Social Google 1.0.0 RELEASE
Spring 社交 google 不支持下载 Google 文档文件,因为它们不是有用的格式。元数据上没有 属性 来下载文件,就像其他文件类型一样。
虽然 Google 自己的 SDK 可以处理 Excel、CSV 和 PDF 等导出格式的下载,但 spring social google 仅公开 getExportedLinks() 属性 查看 URL 和类型,但没有提供实际下载它们的方法。
我现在正在研究分叉它并添加调用 Google 驱动器 v2 导出端点或获取访问令牌的方法的可能性,以便我可以使用股票 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());
}
}
}