MS Graph Java SDK:如何将大文件上传到OneDrive?

时间:2019-01-02 15:13:17

标签: onedrive microsoft-graph-sdks

我正在尝试从Java应用程序将文件上传到OneDrive,但我不了解流程,也看不到SKD中用于文件上传的任何文档或方法。

我发现的唯一流程是:

driveClient.me().drive().root().createUploadSession(uploadProperties).buildRequest().post()

但这会导致NPE: source

如何将内容设置为InputStream?

1 个答案:

答案 0 :(得分:0)

您必须使用 ChunkedUploadProvider 。以下是用于上传大文件的官方示例代码:https://docs.microsoft.com/en-us/graph/sdks/large-file-upload?tabs=java

对我来说,该示例适用于大小小于1.9921875 GB的文件。不幸的是,较大的文件失败,并显示“上传会话失败太多次”错误。 解决方案是使用 File.length()方法获取文件大小:

#ifdef _WIN32
#include <windows.h>
extern "C" __declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
extern "C" __declspec(dllexport) DWORD AmdPowerXpressRequestHighPerformance = 0x00000001;
#endif

代替

long streamSize = file.length();

如示例中所示。

之所以会这样,是因为 fileStream.available()将可用字节返回为整数,并且整数的最大值(以字节为单位)为〜2GB。

希望对您有帮助。