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

使用Java Graph SDK通过PipedStream传文件到SharePoint报Content-Range错误

SharePoint大文件流式上传问题解答

核心结论

  • Microsoft Graph的LargeFileUploadTask不支持无确切大小的流式上传,必须提前提供文件总大小,否则会因无法生成合法的Content-Range请求头触发invalidRequest异常——这正是你遇到的问题根源。

问题原因分析

LargeFileUploadTask基于分块上传机制实现,每一次分块请求都需要通过Content-Range头告知服务器当前块在整个文件中的位置(格式示例:bytes 0-4999/10000)。如果没有文件总大小,服务端无法验证分块的合法性,因此会返回头信息格式错误的异常。
而你使用的PipedStream属于流式数据源,无法提前获取总长度,这和分块上传的硬性要求直接冲突。

可行解决方案

方案1:缓存到临时文件获取大小

若内存限制允许,可先将PipedStream内容写入本地临时文件,获取文件大小后再执行分块上传:

// 将PipedStream写入临时文件
File tempFile = File.createTempFile("upload-", ".tmp");
try (OutputStream os = new FileOutputStream(tempFile)) {
    byte[] buffer = new byte[8192];
    int bytesRead;
    while ((bytesRead = inputStream.read(buffer)) != -1) {
        os.write(buffer, 0, bytesRead);
    }
}

// 获取文件总大小
long streamSize = tempFile.length();

// 重新打开文件流执行上传
try (InputStream fileInputStream = new FileInputStream(tempFile)) {
    LargeFileUploadTask<DriveItem> largeFileUploadTask = new LargeFileUploadTask<>(uploadSession, msGraphServiceClient,
            fileInputStream, streamSize, DriveItem.class);
    LargeFileUploadResult<DriveItem> uploadResults = largeFileUploadTask.upload(CHUNK_SIZE, null, (current, max) -> 
            log.debug(String.format("Uploaded %d bytes of %d total bytes", current, max)));
    return uploadResults.location;
} finally {
    tempFile.delete(); // 上传完成后清理临时文件
}

方案2:使用直接上传(限4MB以内文件)

如果文件大小不超过4MB,可使用直接上传接口,无需分块,也不需要提前获取文件总大小:

DriveItemUploadableProperties properties = new DriveItemUploadableProperties();
properties.setName("your-file-name");

InputStreamContent content = new InputStreamContent("application/octet-stream", inputStream);
DriveItem driveItem = msGraphServiceClient.me().drive().items("parent-item-id")
        .content()
        .buildRequest()
        .put(content);

补充说明

如果文件体积极大且无法缓存到本地,目前Microsoft Graph Java SDK暂不支持无大小的流式分块上传。这种场景下可考虑两种替代方案:

  • 调整文件生成逻辑,通过生成规则提前计算出文件总字节数
  • 先上传至支持流式上传的第三方存储服务,再同步至SharePoint

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:07:14