You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Java SDK下从S3桶复制至非S3目标(如SharePoint)的工具咨询

从S3桶向SharePoint传输文件的解决方案

AWS Java SDK仅针对AWS生态服务设计,确实没有直接支持跨到SharePoint的传输工具,需通过两步中转实现:先从S3读取文件内容,再借助SharePoint的Java开发工具完成上传。

步骤1:用AWS Java SDK获取S3文件内容

可以直接读取文件流(适合小文件),或下载到本地临时文件(适合大文件,避免内存溢出):

读取文件流示例

// 初始化S3客户端,替换为你的桶所在区域
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
        .withRegion(Regions.US_EAST_1)
        .build();

// 获取S3对象的输入流
S3Object s3Object = s3Client.getObject("你的源S3桶名", "目标文件的键值");
InputStream fileInputStream = s3Object.getObjectContent();

下载到临时文件示例

File tempFile = File.createTempFile("s3-temp-", ".tmp");
s3Client.getObject(new GetObjectRequest("你的源S3桶名", "目标文件的键值"), tempFile);

步骤2:用Microsoft Graph SDK上传到SharePoint

微软官方的Microsoft Graph Java SDK是操作SharePoint的标准工具,核心通过Graph API完成文件上传。

前置准备

  • 在Azure AD注册应用,获取客户端ID、客户端密钥、租户ID,并给应用分配Files.ReadWrite.All或对应SharePoint站点的权限
  • 引入Maven依赖(使用最新稳定版):
<dependency>
    <groupId>com.microsoft.graph</groupId>
    <artifactId>microsoft-graph</artifactId>
    <version>6.3.0</version>
</dependency>
<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-identity</artifactId>
    <version>1.12.0</version>
</dependency>

上传流到SharePoint示例

// 初始化Graph客户端
ClientSecretCredential credential = new ClientSecretCredentialBuilder()
        .clientId("你的Azure客户端ID")
        .clientSecret("你的Azure客户端密钥")
        .tenantId("你的Azure租户ID")
        .build();

GraphServiceClient<Request> graphClient = GraphServiceClient.builder()
        .authenticationProvider(new AzureIdentityAuthenticationProvider(credential))
        .buildClient();

// 替换为你的SharePoint站点ID、文档库Drive ID、目标文件名
String siteId = "你的SharePoint站点ID";
String driveId = "文档库对应的Drive ID";
String targetFileName = "上传后的文件名.ext";

// 执行上传
graphClient.sites(siteId).drives(driveId).root().itemWithPath(targetFileName)
        .content()
        .buildRequest()
        .put(fileInputStream);

// 记得关闭S3对象流,释放资源
s3Object.close();

上传临时文件到SharePoint示例

如果之前将S3文件下载到了临时文件,可使用以下代码:

FileInputStream tempFileStream = new FileInputStream(tempFile);
graphClient.sites(siteId).drives(driveId).root().itemWithPath(targetFileName)
        .content()
        .buildRequest()
        .put(tempFileStream);

// 上传完成后删除临时文件
tempFile.delete();

额外注意事项

  • 大文件建议使用Graph SDK的分片上传功能,避免超时或传输失败
  • 确保Azure AD应用的权限范围覆盖目标SharePoint站点和文档库
  • 处理流时务必关闭资源,防止内存泄漏

内容的提问来源于stack exchange,提问作者Megan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 10:18:19