直接从java中的google drive读取

xoefb8l8  于 2021-07-09  发布在  Java
关注(0)|答案(4)|浏览(399)

请我需要阅读一个文件的内容存储在谷歌驱动器编程。我期待着某种 InputStream is = <drive_stuff>.read(fileID); 有什么帮助吗?如果我能用某种方式写回一个文件,我也会很感激的
OutputStream dos = new DriveOutputStream(driveFileID); dos.write(data); 如果这种方便的方法对于驱动器所能提供的功能来说太多了,请告诉我如何直接从java.io.inputstream/outputstream/reader/writer读取/写入驱动器,而不创建我要传送到驱动器的数据的临时本地文件副本。谢谢!

mklgxw1f

mklgxw1f1#

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

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());
dauxcl2d

dauxcl2d2#

//构建新的授权api客户端服务。驱动器服务=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);
            } 
        }
    }
k10s72fa

k10s72fa3#

使用google-api-services-drive-v3-rev24-java-1.22.0:
要读取文件的内容,请确保设置 DriveScopes.DRIVE_READONLY 当你这么做的时候 GoogleAuthorizationCodeFlow.Builder(...) 在您的凭证授权方法/代码中。
你需要 fileId 要读取的文件的。你可以这样做: FileList result = driveService.files().list().execute(); 然后可以迭代 result 对于 file 以及 fileId 你想读书。
一旦你这样做了,阅读的内容将是这样的:

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

vfhzx4xs4#

请看一下googledrivesdk文档中提供的dreditjava示例。这个例子展示了如何授权和生成读取元数据、文件数据和将内容上传到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());
}

相关问题