【问题标题】:Create a permanent public download link to OneDrive file using Microsoft Graph使用 Microsoft Graph 创建指向 OneDrive 文件的永久公共下载链接
【发布时间】:2019-03-06 01:25:05
【问题描述】:

我正在尝试使用 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"
}

返回

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

.

  1. https://stackoverflow.com/a/37951378/2219407

    使用之前的link.webUrl生成下载地址(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";

但它会返回

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

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

任何人都知道任何有效的方法?

【问题讨论】:

    标签: microsoft-graph-api onedrive


    【解决方案1】:

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

    https://{tenant}-my.sharepoint.com/:i:/g/personal/{account-name}_onmicrosoft_com/{token}?download=1
    

    就是这样。

    关于第 3 步中发生的错误的旁注。

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

    【讨论】:

    • 谢谢,效果很好!不敢相信它是如此之小 :) 这是否正式记录在某处以供将来参考?
    • 很高兴知道!关于文档,也不知道它是否正式记录,这就是它在我们的一个项目中的实施方式
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-22
    • 2012-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多