复制文件时出错 Google Drive SDK

Error copying a file Google Drive SDK

从昨天开始,在几个月未更改的代码中,我们在使用 Java 驱动器 API.

复制文件时遇到错误

我们使用的方法:

service.files().copy(originalID, copiedFile).execute();

并得到:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 500 OK
{
  "code" : 500,
  "errors" : [ {
    "domain" : "global",
    "message" : "Internal Error",
    "reason" : "internalError"
  } ],
  "message" : "Internal Error"
}

完整代码为:

public File copiarArchivo(Drive service, String originalID, String tituloCopia) {
        File copiedFile = new File();
        copiedFile.setTitle(tituloCopia);

        try {
            return service.files().copy(originalID, copiedFile).execute();
        } catch (IOException e) {
            System.out.println("Un error ocurrio: " + e);
        }

        return null;
      }

Drive 服务已初始化,我们有一个不为空的 OriginalID。

由于这是一个内部错误,可能会随着时间的推移自动解决。 Google 端有些东西不工作,你可能没事。很多人似乎都有这个问题,然后就消失了。

这与您遇到的问题不完全相同,但它是一个 500 错误,可以自动解决:

https://code.google.com/p/gdata-issues/issues/detail?id=6352

您似乎在使用电子表格 API 使用的旧 KeyID。使用驱动器 API 复制文件时不再允许使用该 ID。您需要获取新的 FileID 并在复制语句中使用它而不是旧的。

您可以按照以下示例获取新 ID:

public String getNewFileID(Drive service, String oldSpreadsheetsKeyID){
   File file = service.files().get(oldSpreadsheetsKeyID).execute()
   String alternateLink = file.getAlternateLink();

   String[] aux1 = alternateLink.split("/spreadsheets/d/");         
   String[] aux2 = aux1[1].split("/edit?");

   String newFileID = aux2[0];

   return newFileID;
}

这将从完整的 URL 中恢复 ID。不过,拆分 URL 可能是一种更有效的方法。您可以使用此 ID 进行复制。