直接从java中的google drive读取

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

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

mklgxw1f

mklgxw1f1#

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

  1. URL url = new URL(urlParam);
  2. HttpURLConnection connection = (HttpURLConnection) url
  3. .openConnection();
  4. connection.setDoOutput(true);
  5. connection.setRequestMethod("GET");
  6. connection
  7. .setRequestProperty("Authorization",
  8. "OAuth "+accessToken);
  9. String docText = convertStreamToString(connection.getInputStream());
dauxcl2d

dauxcl2d2#

//构建新的授权api客户端服务。驱动器服务=getdriveservice();

  1. // Print the names and IDs for up to 10 files.
  2. FileList result = service.files().list()
  3. .setPageSize(10)
  4. .setFields("nextPageToken, files(id, name)")
  5. .execute();
  6. List<File> files = result.getFiles();
  7. if (files == null || files.size() == 0) {
  8. System.out.println("No files found.");
  9. } else {
  10. System.out.println("Files:");
  11. for (File file : files) {
  12. System.out.printf("%s (%s)\n", file.getName(), file.getId());
  13. String fileId = file.getId();
  14. Export s=service.files().export(fileId, "text/plain");
  15. InputStream in=s.executeMediaAsInputStream();
  16. InputStreamReader isr=new InputStreamReader(in);
  17. BufferedReader br = new BufferedReader(isr);
  18. String line = null;
  19. StringBuilder responseData = new StringBuilder();
  20. while((line = br.readLine()) != null) {
  21. responseData.append(line);
  22. }
  23. System.out.println(responseData);
  24. }
  25. }
  26. }
展开查看全部
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 你想读书。
一旦你这样做了,阅读的内容将是这样的:

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

vfhzx4xs4#

请看一下googledrivesdk文档中提供的dreditjava示例。这个例子展示了如何授权和生成读取元数据、文件数据和将内容上传到google驱动器的请求。
下面是一个代码片段,演示如何使用 ByteArrayContent 要将媒体上载到存储在字节数组中的google驱动器,请执行以下操作:

  1. /**
  2. * Create a new file given a JSON representation, and return the JSON
  3. * representation of the created file.
  4. */
  5. @Override
  6. public void doPost(HttpServletRequest req, HttpServletResponse resp)
  7. throws IOException {
  8. Drive service = getDriveService(req, resp);
  9. ClientFile clientFile = new ClientFile(req.getReader());
  10. File file = clientFile.toFile();
  11. if (!clientFile.content.equals("")) {
  12. file = service.files().insert(file,
  13. ByteArrayContent.fromString(clientFile.mimeType, clientFile.content))
  14. .execute();
  15. } else {
  16. file = service.files().insert(file).execute();
  17. }
  18. resp.setContentType(JSON_MIMETYPE);
  19. resp.getWriter().print(new Gson().toJson(file.getId()).toString());
  20. }
展开查看全部

相关问题