使用 Microsoft Graph 创建 OneDrive 文件的永久公共下载链接

blo*_*leh 5 onedrive microsoft-graph-api

我正在尝试使用 Microsoft Graph API 获取 OneDrive 文件的永久公共下载链接。目标是让<img src="DOWNLOAD_LINK">我的网站上的 OneDrive 图像文件适用于查看该页面的任何用户。

目前我已经尝试了以下方法:

  1. GET https://graph.microsoft.com/beta/me/drive/root:/PATH/TO/FILE.png( doc ) 返回

    • @microsoft.graph.downloadUrl:公开下载链接,但 1 小时后过期。
    • webUrl:私人下载链接,需要身份验证。

  1. POST https://graph.microsoft.com/beta/me/drive/root:/PATH/TO/FILE.png:/createLink( doc ) 带有 JSON 正文
{
    "type": "view",
    "scope": "anonymous"
}
Run Code Online (Sandbox Code Playgroud)

返回

  • link.webUrl:公共链接但不是下载链接。相反,它会在 OneDrive 文件查看器中打开文件(然后我无法在 HTML 中使用/嵌入该文件)。

  1. /sf/answers/2656596491/

    使用 previouslink.webUrl生成下载 url ( doc ):

$linkWebUrl = "https://domain-my.sharepoint.com/:i:/g/personal/username_domain/RANDOMTOKEN";
$b64 = base64_encode($linkWebUrl);
$b64 = trim($b64, "=");
$b64 = str_replace("/", "_", $b64);
$b64 = str_replace("+", "-", $b64);

$url = "https://api.onedrive.com/v1.0/shares/u!" . $b64 . "/root/content";
Run Code Online (Sandbox Code Playgroud)

但它返回

{"error":{"code":"invalidRequest","message":"Invalid shares key."}}

我认为这是因为我混合了 Graph 和 OneDrive API,所以它无法识别密钥?替换api.onedrive.comgraph.microsoft.com也不起作用,因为 Graph 需要通常的 Authorization 标头。

有人知道有什么作用吗?

Vad*_*hev 6

download=1您已经非常接近了,但需要将 url 查询参数附加到生成的共享链接以创建下载链接,而不是步骤 3,例如:

https://{tenant}-my.sharepoint.com/:i:/g/personal/{account-name}_onmicrosoft_com/{token}?download=1
Run Code Online (Sandbox Code Playgroud)

就是这样。

只是关于步骤 3 中发生的错误的附注。

无法通过 OneDrive Personal ( https://api.onedrive.com )端点使用为 OneDrive for Business 或 SharePoint ( https://tenant-my.sharepoint.com )生成的共享链接shares

  • 很高兴知道!关于文档,也不知道它是否正式记录,这就是它在我们的一个项目中实施的方式 (2认同)