2016-01-31 125 views
2

我在使用Google Drive API时遇到了一些麻烦。 我正尝试使用Java应用程序从我自己的Google Drive下载电子表格。无法以CSV格式下载文件

根据Google的文档(https://developers.google.com/drive/v3/web/manage-downloads) ,可以使用“text/csv”参数以CSV格式下载电子表格。我的问题是,当我试图下载我的文件在CSV我包含一个错误,但在其他格式的工作。

我得到的错误是:

Exception in thread "main" com.google.api.client.googleapis.json.GoogleJsonResponseException: 500 Internal Server Error 
{ 
    "code" : 500, 
    "errors" : [ { 
    "domain" : "global", 
    "message" : "Internal Error", 
    "reason" : "internalError" 
    } ], 
    "message" : "Internal Error" 
} 
    at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145) 
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113) 
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:321) 
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1056) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352) 
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeAndDownloadTo(AbstractGoogleClientRequest.java:541) 

我的代码如下:

public static Drive getDriveService() throws IOException 
     { 
      Credential credential = authorize(); 
      return new Drive.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build(); 
     } 

    public static void main(String[] args) throws IOException 
     { 
      // Build a new authorized API client service. 
      Drive service = getDriveService(); 

      // Print the names and IDs for up to 10 files. 
      FileList result = service.files().list().setPageSize(10).setFields("nextPageToken, files(id, name)").execute(); 
      List<File> files = result.getFiles(); 
      if (files == null || files.size() == 0) 
       { 
        System.out.println("No files found."); 
       } 
      else 
       { 
        for (File file : files) 
         { 
          if (file.getName().equals(Settings.DRIVE_FILE_NAME)) 
           { 
            System.out.printf("%s (%s)\n", file.getName(), file.getId()); 
            String fileId = file.getId(); 
            OutputStream outputStream = new ByteArrayOutputStream(); 
            service.files().export(fileId, "text/csv").executeAndDownloadTo(outputStream); 
            System.out.println(outputStream); 

           } 

         } 
       } 
     } 

我在哪里做错了什么?

谢谢!

+0

尝试使用方法executeMediaAndDownloadTo()而不是executeAndDownloadTo() –

+0

这是一个服务器端错误。您需要查看服务器日志以查看出了什么问题。 – EJP

回答

1

根据Google官方文档,当您收到'500:后端错误'时,处理请求时发生意外错误。

建议的操作是使用'指数回退'。 指数回退是网络应用程序的一种标准错误处理策略,其中客户端在日益增长的时间内周期性地重试失败的请求。如果大量请求或繁重网络流量导致服务器返回错误,指数退避可能是处理这些错误的好策略。

指数退避增加了带宽使用效率,减少了获得成功响应所需的请求数量。

有关详细信息,请follw链接:https://developers.google.com/drive/v3/web/handle-errors#500_backend_error强调文本

+0

请问谢谢! – user3127125

+0

是Google的建议行动,还是你的?服务器错误是服务器错误。没有理由相信重复请求不会产生相同的错误。它需要在*服务器端调查*和*修正*不仅在运行时无意识地重复。 – EJP

+0

在Google文档中有关Drive REST API的说明,如果遇到'500:后端错误',建议的操作是使用'指数退避'。这里是我的答案:https://developers.google.com/drive/v3/web/handle-errors#500_backend_error –