如何将OneDrive下载链接转换为不提示用户的直接链接?

问题描述 投票:0回答:2

在我的应用程序中,用户可以输入指向要下载的文件的 URL。他们可能会输入 OneDrive URL,例如 https://1drv.ms/u/s!AqyU3_Or8s5Bm3eKXA31Xg7DFYpm?e=p0vACS。通过网络浏览器下载时,这样的 OneDrive URL 就可以了。您会看到一个带有下载按钮的页面,上面写着“嗯...看起来这个文件没有预览”——在很多情况下都没有预览,您只需单击该按钮即可。

当我尝试以正常方式下载 URL 时,问题出现在我的应用程序中,因为插入了带有下载按钮的页面。

我一直在寻找一种方法来将这种形式的 URL 转换为可以直接下载的 URL,而无需插入页面(例如可以为 Google Drive 完成)。

这种转变会是什么?在某些地方提到添加“?download=1”,但对我不起作用。

c# download onedrive
2个回答
1
投票

我终于找到答案了在这里

https://api.onedrive.com/v1.0/shares/u!XXXXX/root/content

其中 XXXXX 是 url 的 64 进制等效值。

在 C# 中:

if ( url.StartsWith ( "https://1drv.ms/" ) )
{
    url = "https://api.onedrive.com/v1.0/shares/u!" + url.ToBase64 () + "/root/content";
}

这适用于 OneDrive 个人版。我认为它不适用于 OneDrive 业务或 Sharepoint - 请参阅此处

如果有人可以在这里发布解决方案(如果存在的话),那就太好了。


0
投票

我曾经在 python 中使用过这段代码:

async def create_onedrive_directdownload(onedrive_link):
data_bytes64 = base64.b64encode(bytes(onedrive_link, 'utf-8'))
data_bytes64_string = data_bytes64.decode('utf-8').replace('/', '_').replace('+', '-').rstrip("=")
result_url = f"https://api.onedrive.com/v1.0/shares/u!{data_bytes64_string}/root"
return result_url

工作正常,但看起来与 API 相关,我的 URL 是公开的,但当我尝试通过该方法传递链接时,新 URL 没有足够的授权。

{"error":{"code":"unauthenticated","message":"The caller is not authenticated."}}
© www.soinside.com 2019 - 2024. All rights reserved.