Android Java应用使用Microsoft Graph SDK实现带自定义冲突解决策略的OneDrive小文件上传
Android Java应用使用Microsoft Graph SDK实现带自定义冲突解决策略的OneDrive小文件上传
嗨,我来帮你搞定这个OneDrive上传的冲突策略问题!你之前用FunctionOption其实找错了参数类型,咱们用Graph SDK上传小文件时,自定义冲突行为需要用查询参数,对应的是QueryOption而不是FunctionOption,这应该就是你之前没成功的原因。
正确的实现步骤和代码示例
首先先明确冲突策略的可选值,你可以根据需求挑选:
rename:如果文件已存在,自动重命名(比如test.txt变成test(1).txt)replace:直接覆盖已存在的文件fail:如果文件已存在就抛出错误(这是默认行为)
下面是完整的Android Java代码示例:
import com.microsoft.graph.models.extensions.DriveItem; import com.microsoft.graph.requests.extensions.GraphServiceClient; import com.microsoft.graph.options.QueryOption; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.util.Collections; // 准备要上传的文件信息 String targetFileName = "你的文件名.txt"; String filePath = "/sdcard/你的文件路径/你的文件名.txt"; // 替换成你的实际文件路径 InputStream fileInputStream = new FileInputStream(new File(filePath)); // 创建冲突解决的查询参数 QueryOption conflictBehavior = new QueryOption("@microsoft.graph.conflictBehavior", "rename"); try { // 执行上传请求,添加冲突策略参数 DriveItem uploadedItem = mClient.getGraphServiceClient() .me() .drive() .root() // 上传到OneDrive根目录,要传指定文件夹的话改成.itemWithPath("文件夹路径") .itemWithPath(targetFileName) .content() .buildRequest(Collections.singletonList(conflictBehavior)) .put(fileInputStream); // 上传成功后的处理 System.out.println("文件上传完成!新文件名:" + uploadedItem.name); } catch (Exception e) { // 异常处理 e.printStackTrace(); }
额外说明
- 如果要上传到OneDrive的指定文件夹,比如根目录下的
工作文档文件夹,只需要把root()替换成itemWithPath("工作文档")即可,示例:
.me() .drive() .itemWithPath("工作文档") .itemWithPath(targetFileName) .content() // ... 后续代码不变
别忘了处理文件权限!如果是Android 10及以上,需要申请
READ_EXTERNAL_STORAGE或者使用媒体库API读取文件,避免出现文件读取失败的情况。确保你的Graph SDK版本是最新的,旧版本可能对
QueryOption的支持有差异。
备注:内容来源于stack exchange,提问作者Chin gtman
相关产品推荐
相关产品推荐

