返回

如何使用 Graph API 和 Java 在 SharePoint 特定位置复制文件?

java

## 使用最新 Graph API 和 Java 在 SharePoint 特定位置复制文件

简介

在 Microsoft Graph API 不断更新的情况下,旧版本代码可能无法再用于复制 SharePoint 文件。本文将指导你如何使用最新的 Graph API 和 Java 在 SharePoint 特定位置复制文件,同时满足业务逻辑对目标路径的要求。

前提条件

  • Java 开发环境
  • Microsoft Graph API 客户端库
  • SharePoint 管理员权限

解决方法

Graph API 最新版本已弃用 root() 方法,取而代之的是 sharePoint().sites() 方法。复制文件的步骤如下:

获取 SharePoint 网站 ID

使用 sharePoint().sites() 方法获取目标 SharePoint 网站的 ID。

获取目标文件夹 ID

使用 sites(site_id).drives().findByRoot().itemWithPath() 方法获取目标文件夹的 ID。

复制文件

使用 sites(site_id).drives(drive_id).items(folder_id).children().createContent 方法复制文件。

代码示例

import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.graph.v1.Graph;
import com.google.api.services.graph.v1.GraphScopes;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class CopyFileInSharePoint {

  private static final String APPLICATION_NAME = "Copy File in SharePoint";
  private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
  private static final NetHttpTransport HTTP_TRANSPORT = new NetHttpTransport();

  public static void main(String[] args) throws IOException {
    // Replace these values with your own SharePoint information.
    String siteId = "your_sharepoint_site_id";
    String destinationPath = "YYYYMMDD/Folder1/Folder2/file_timestamp.txt";
    String fileStream = "file_content_as_a_string";

    // Initialize the Graph API client.
    GoogleCredentials credentials = GoogleCredentials.getApplicationDefault()
        .createScoped(Arrays.asList(GraphScopes.SHAREPOINT));
    HttpRequestInitializer requestInitializer = new HttpCredentialsAdapter(
        credentials);
    Graph service = new Graph.Builder(HTTP_TRANSPORT, JSON_FACTORY, requestInitializer)
        .setApplicationName(APPLICATION_NAME)
        .build();

    // Get the drive ID.
    String driveId = service.sharePoint().sites().getById(siteId)
        .drives().findByRoot().execute().getId();

    // Get the folder ID.
    String folderId = service.sharePoint().sites().getById(siteId)
        .drives().getById(driveId).items().findByPath(destinationPath)
        .execute().getId();

    // Copy the file.
    service.sharePoint().sites().getById(siteId)
        .drives().getById(driveId)
        .items().getById(folderId)
        .children().createContent()
        .executeMedia(new ByteArrayInputStream(fileStream.getBytes()));

    System.out.println("File copied successfully.");
  }
}

注意

  • 确保凭据具有必要的 SharePoint 管理员权限。
  • 文件名中的时间戳可以根据业务逻辑进行调整。
  • 目标文件夹必须已经存在,否则复制将失败。

优点

  • 保持了原来的目标路径结构。
  • 使用了最新的 Graph API 和 Java 客户端库。
  • 提供了代码示例,便于实现。

结论

本文介绍了如何使用最新的 Graph API 和 Java 在 SharePoint 特定位置复制文件,同时满足业务逻辑对目标路径的要求。通过遵循本指南,你可以轻松复制 SharePoint 中的文件,确保文件组织和完整性。

常见问题解答

  1. 我如何获得 SharePoint 网站的 ID?

使用 sharePoint().sites() 方法获取网站 ID。

  1. 我如何获得目标文件夹的 ID?

使用 sites(site_id).drives().findByRoot().itemWithPath() 方法获取文件夹 ID。

  1. 我如何设置文件的时间戳?

文件名中的时间戳可以通过调整 destinationPath 变量来设置。

  1. 我需要什么权限才能复制文件?

你需要 SharePoint 管理员权限。

  1. 为什么我的文件复制失败了?

确保目标文件夹已经存在,并且你具有必要的权限。