提问者:小点点

(Java)下载URL不工作


我正在努力使用GoogleDrive API下载文件。我只是在写代码,应该把文件从我的驱动器下载到我的电脑上。我终于到了一个阶段,在这个阶段我可以通过身份验证并查看文件元数据。由于某种原因,我仍然无法下载文件。我得到的下载URL如下所示:

https://doc-04-as-docs.googleusercontent.com/docs/securesc/XXXXXXXXXXXXXX/0B4dSSlLzQCbOXzAxNGxuRUhVNEE?e=download

当我运行代码或复制并粘贴到浏览器中时,此URl不会下载任何内容。但是,在浏览器中,当我删除“

我的下载方法是直接出谷歌驱动器API留档:

public static InputStream downloadFile(Drive service, File file) {
  if (file.getDownloadUrl() != null && file.getDownloadUrl().length() > 0) {
    try {
      System.out.println("Downloading: "+ file.getTitle());
      return service.files().get(file.getId()).executeMediaAsInputStream();
    } catch (IOException e) {
      // An error occurred.
      e.printStackTrace();
      return null;
    }
  } else {
    // The file doesn't have any content stored on Drive.
    return null;
  }
}

有人知道这是怎么回事吗?

提前谢谢。


共1个答案

匿名用户

由于您使用的是Drive v2,因此另一种方法(也在文档中)是通过HttpRequest对象获取InputStream

/**
* Download a file's content.
*
* @param service Drive API service instance.
* @param file Drive File instance.
* @return InputStream containing the file's content if successful,
* {@code null} otherwise.
*/
private static InputStream downloadFile(Drive service, File file) {
    if (file.getDownloadUrl() != null && file.getDownloadUrl().length() > 0) {
        try {
            HttpResponse resp =
            service.getRequestFactory().buildGetRequest(new GenericUrl(file.getDownloadUrl()))
            .execute();
            return resp.getContent();
        } catch (IOException e) {
            // An error occurred.
            e.printStackTrace();
            return null;
        }
    } else {
        // The file doesn't have any content stored on Drive.
        return null;
    }
}