如何在OneDrive API中创建共享链接、实现非授权访问及子项操作?
一、已登录用户创建文件夹共享链接
直接调用 POST /drives/{drive-id}/items/{item-id}/createLink 接口即可,请求体里指定权限类型(比如view只读)和链接范围(anonymous允许未登录用户访问)。举个例子,请求体可以这么写:
{ "type": "view", "scope": "anonymous" }
接口返回的webUrl就是生成的共享链接,另外返回的id是这个共享项的唯一标识,后续访问会用到。
二、direct endpoint的命名空间前缀
官方提到的direct endpoint命名空间前缀就是share。比如你要获取共享项的详情,接口路径是GET /shares/{encoded-sharing-url}/driveItem,这里的shares就是对应的前缀,不用额外加其他内容。注意这里的{encoded-sharing-url}需要把共享链接做URL编码,比如把普通的https链接转成u!aHR0cHM6Ly9...这种格式。
三、未登录用户用共享链接操作文件
1. 先解析共享链接拿到基础信息
把共享链接做URL编码后,调用GET /shares/{encoded-sharing-url}/driveItem,就能拿到这个共享文件夹的id和对应的driveId(这个drive是共享专属的,不是用户自己的OneDrive)。
2. 列出文件夹里的子项
用上面拿到的driveId和文件夹id,调用GET /drives/{shared-drive-id}/items/{folder-id}/children,就能列出文件夹里的所有文件和子文件夹。
3. 对子项做进一步操作
不管是下载文件还是查看子项详情,直接用子项的id拼接接口就行:
- 下载文件:调用
GET /drives/{shared-drive-id}/items/{file-id}/content,只要共享链接权限足够,未登录用户直接发起请求就能拿到文件内容。 - 查看子项详情:调用
GET /drives/{shared-drive-id}/items/{item-id},同样基于共享权限就能访问。
重点提醒:所有操作共享子项的接口,都要用共享专属的driveId,不能用用户自己的OneDrive的driveId,不然未登录用户会没有权限访问。
内容的提问来源于stack exchange,提问作者Lucian Wischik

