基于OneDrive Android SDK实现租户内可访问站点列表及文件上传问题
获取租户内用户可访问站点列表并实现文件上传
我来帮你搞定这个需求!要实现租户内用户可访问站点的列表展示,再让用户选择站点上传文件,用Microsoft Graph SDK for Android(OneDrive相关操作基于Graph API)可以按下面的步骤来:
第一步:请求用户可访问的站点列表
首先调用Graph API的sites端点,获取用户有权访问的所有站点。这里给你准备了可直接复用的代码示例:
// 传入你已经初始化并完成授权的GraphServiceClient实例 GraphServiceClient<Request> client = ...; // 请求站点列表,只获取需要的字段来减少数据传输量 client.sites() .buildRequest() .select("id,name,webUrl") // 站点ID、名称、网页地址这三个字段足够展示和后续操作 .get(new Callback<SitesCollectionPage>() { @Override public void onSuccess(SitesCollectionPage sitesCollectionPage, Response response) { // 拿到站点列表后,就可以绑定到RecyclerView这类UI组件了 List<Site> sites = sitesCollectionPage.getCurrentPage(); for (Site site : sites) { String siteName = site.name; String siteId = site.id; Log.d("SiteList", "站点名称:" + siteName + ",站点ID:" + siteId); } } @Override public void onFailure(ClientException ex) { // 处理请求失败场景,比如网络问题、权限不足 Log.e("SiteError", "获取站点列表失败:" + ex.getMessage()); } });
第二步:让用户选择目标站点
把上面拿到的Site列表绑定到Android的RecyclerView或Spinner中,做一个简洁的选择列表。用户选中后,记得把对应的siteId保存下来,后续上传文件要用到这个ID。
第三步:上传文件到选中的站点
每个站点默认都有一个文档库(通常名为"Documents"),我们可以直接上传到这个文档库的根目录,代码如下:
// 用户选中的站点ID String selectedSiteId = "这里填入用户选中的站点ID"; // 要上传的文件名和内容 String fileName = "test_upload.txt"; byte[] fileContents = "这是上传到站点的测试内容".getBytes(); // 执行上传操作 client.sites(selectedSiteId) .drive() .root() .children(fileName) .content() .buildRequest() .put(fileContents, new Callback<DriveItem>() { @Override public void onSuccess(DriveItem driveItem, Response response) { Log.d("UploadSuccess", "文件上传成功!访问地址:" + driveItem.webUrl); } @Override public void onFailure(ClientException ex) { Log.e("UploadError", "文件上传失败:" + ex.getMessage()); } });
如果需要上传到站点文档库的子文件夹,只需把root()替换成子文件夹的路径或ID即可,示例如下:
// 上传到站点文档库的「测试文件夹」子目录 client.sites(selectedSiteId) .drive() .items("root:/测试文件夹/") // 子文件夹的相对路径 .children(fileName) .content() .buildRequest() .put(fileContents, callback);
关键注意事项
- 权限配置:你的应用必须在Azure AD门户中申请
Sites.Read.All权限(用于读取站点列表)和Files.ReadWrite.All/Sites.ReadWrite.All权限(用于上传文件),且用户授权时需同意这些权限,否则请求会失败。 - 权限校验:部分站点用户可能只有只读权限,上传时会报错,建议在上传前或展示站点时做权限判断,或在失败时给用户友好提示。
- 分页处理:如果租户内站点数量较多,记得用
top()和skip()方法做分页加载,比如.top(20)每次加载20个站点,避免一次性加载过多数据导致APP卡顿。
内容的提问来源于stack exchange,提问作者N. Rodriguez
相关产品推荐
相关产品推荐

