直接从Java中的Google云端硬盘阅读

时间:2012-08-24 16:33:46

标签: java file-io google-drive-api google-api-java-client

我需要以编程方式阅读存储在Google云端硬盘中的文件内容。我期待着某种形式 InputStream is = <drive_stuff>.read(fileID);
有帮助吗? 如果我可以使用某种

回写文件,我也会很感激

OutputStream dos = new DriveOutputStream(driveFileID);
dos.write(data);

如果这种方便的方法对于Drive可以提供的方法来说太多了,那么我想建议如何直接从java.io.InputStream / OutputStream / Reader / Writer读取/写入Drive而不创建我要发送到驱动器的数据的临时本地文件副本。谢谢!

4 个答案:

答案 0 :(得分:0)

请查看Google Drive SDK documentation上提供的DrEdit Java示例。 此示例显示如何授权和构建读取元数据,文件数据以及将内容上载到Google云端硬盘的请求。

以下是一段代码示例,展示如何使用ByteArrayContent将媒体上传到存储在字节数组中的Google云端硬盘:

/**
 * Create a new file given a JSON representation, and return the JSON
 * representation of the created file.
 */
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp)
    throws IOException {
  Drive service = getDriveService(req, resp);
  ClientFile clientFile = new ClientFile(req.getReader());
  File file = clientFile.toFile();

  if (!clientFile.content.equals("")) {
    file = service.files().insert(file,
        ByteArrayContent.fromString(clientFile.mimeType, clientFile.content))
        .execute();
  } else {
    file = service.files().insert(file).execute();
  }

  resp.setContentType(JSON_MIMETYPE);
  resp.getWriter().print(new Gson().toJson(file.getId()).toString());
}

答案 1 :(得分:0)

这是我的应用程序中的一个(不完整的)片段,可能有所帮助。

            URL url = new URL(urlParam);
        HttpURLConnection connection = (HttpURLConnection) url
                .openConnection();
        connection.setDoOutput(true);
        connection.setRequestMethod("GET");
        connection
                .setRequestProperty("Authorization",
                        "OAuth "+accessToken);

        String docText = convertStreamToString(connection.getInputStream());

答案 2 :(得分:0)

使用google-api-services-drive-v3-rev24-java-1.22.0:

要阅读文件内容,请确保在凭据授权方法/代码中执行DriveScopes.DRIVE_READONLY时设置GoogleAuthorizationCodeFlow.Builder(...)

您需要要阅读的文件的fileId。你可以这样做:
FileList result = driveService.files().list().execute();
然后,您可以为要阅读的resultfile重复fileId

完成后,阅读内容将是这样的:

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
driveService.files().get(fileId).executeMediaAndDownloadTo(outputStream);
InputStream in = new ByteArrayInputStream(outputStream.toByteArray());

答案 3 :(得分:0)

//构建新的授权API客户端服务。         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 {
        System.out.println("Files:");
        for (File file : files) {
            System.out.printf("%s (%s)\n", file.getName(), file.getId());
            String fileId = file.getId();

                Export s=service.files().export(fileId, "text/plain");
                InputStream in=s.executeMediaAsInputStream();
                InputStreamReader isr=new InputStreamReader(in);
                BufferedReader br = new BufferedReader(isr);
                String line = null;

                StringBuilder responseData = new StringBuilder();
                while((line = br.readLine()) != null) {
                    responseData.append(line);
                }
                System.out.println(responseData);
            } 
        }
    }