在我的应用程序中,用户可以输入指向要下载的文件的 URL。他们可能会输入 OneDrive URL,例如 https://1drv.ms/u/s!AqyU3_Or8s5Bm3eKXA31Xg7DFYpm?e=p0vACS。通过网络浏览器下载时,这样的 OneDrive URL 就可以了。您会看到一个带有下载按钮的页面,上面写着“嗯...看起来这个文件没有预览”——在很多情况下都没有预览,您只需单击该按钮即可。
当我尝试以正常方式下载 URL 时,问题出现在我的应用程序中,因为插入了带有下载按钮的页面。
我一直在寻找一种方法来将这种形式的 URL 转换为可以直接下载的 URL,而无需插入页面(例如可以为 Google Drive 完成)。
这种转变会是什么?在某些地方提到添加“?download=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 - 请参阅此处
如果有人可以在这里发布解决方案(如果存在的话),那就太好了。
我曾经在 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."}}