复制文件时出错Google Drive SDK

时间:2015-07-03 11:51:37

标签: java google-drive-api

从昨天开始,代码在几个月内没有更改,我们在使用Java Drive 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;
      }

云端硬盘服务已初始化,我们的原始ID不为空。

2 个答案:

答案 0 :(得分:0)

由于这是一个内部错误,它可能会随着时间自动解决。谷歌的一些东西不起作用,你可能没事。许多人似乎都遇到了这个问题,然后它就消失了。

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

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

答案 1 :(得分:0)

您似乎正在使用Spreadsheets API使用的旧KeyID。使用Drive 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制作副本。