bash - 将文件上传到 OneDrive 时出现 InvalidAuthenticationToken
问题描述
我正在尝试使用以下代码将文件上传到 OneDrive:
$graph_url = 'https://graph.microsoft.com/v1.0/me/drive/root:/filename:/createUploadSession';
$file = file_get_contents('logo.jpeg');
$headers = [
'Content-Type: json',
"Cache-Control: no-cache",
"Pragma: no-cache",
"Authorization: bearer EwAQA61DBAAUcSSzoTJJsy+XrnQXgAKO5cj4yc8AAewWnvfTuLAC2gDmYesGiVawqeIpfS8lJjyCyeXQMrKOu92FA0SK12N/87GBTs4ba2LJ5buqmm9gX18by0jPWzZ5qvpc+BdfMC2wUyiMYxh8QH8BJFBctAVgSaKM1KmhA8mAwb2czyw4OeWdupKH7qSPvjRtwBTTxxX8iIO3IeNbpXDghri9MWRGyVIffGf2Oi+RzQm5jbGuDtXrQa4K80m1o8PHcEkdIEXbaAgIE8oBYCVBQ7fyYxA84b0NjghSRbCZDj5rVbo1MDeBv0J4inmPthEbAMcS3fRSBdFs3+SSz+jZwb3SgSp5Q+VXiRs+keDQHspaoSNt4Ho0+pX94WQDZgAACAk/KNYU0yEY4AHihrs84QKvmWWfIOTYCBudQZD7tKp2ZeOpXEI7q3tOTuwHTv7uUmYxkpGswiNSeW2r9DEBdQ5gBtZ/YCXMPhlBLSxxahrl816zsj/UDi2c6dmB+6J1wk60/hm1Ll6vqn8YbtlyQh9hFLpWejo8+Vofh5/kRUfUSl1v7FIP7YIJLvTyNn1gGy9IMnxYdvba9ACGotVpFTAMNdjz6aQwUk4MJjD7csqYVpyMBh8O7bS40dRMjiUkdhXYvA03L/JV818qgo0W0uwJmoqzPJfe7VB+VekqxPCyVT6A86y/OaD1EsTaLwBILG8eS48Odr/qg7azjUsrdryS+rg7wfQEBEL+kIkS5Ne8eTg1/t2aAXFsUukiIBkTYp+Sold4yhqJU2w/cRDZiz9m3GBltjTS+JiIX2Ll0ABbOwmY9pkc6O8/3T0ZhgVuIigfIILTdMGMu9sNvJtVxYL4gbRlNX+gyMBHZHDo2zktdD5l4vDa+TTgn2Fc3CDUli/qLU1UX2SfJ6+B+epmX/wA32cXVtfDPcm605c18LipDoOVGxzf9RVyNe9e3VCFvR9UBmkobodVfE1VhUfzw/s5CHrjzCZ7ZZDt84Hm6VoWIVZLtYueHCuAaEhLa0gWZTKUSwvu3hCDwZUaAg==",
"Content-Length: ".filesize('logo.jpeg'),
];
$ch = curl_init($graph_url);
curl_setopt($ch, CURLOPT_URL, $graph_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PUT");
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_POSTFIELDS, '{}');
$server_output = curl_exec($ch);
$info = curl_getinfo($ch);
但是,结果始终是以下错误:
"error": {
"code": "InvalidAuthenticationToken",
"message": "CompactToken parsing failed with error code: 8004920A",
"innerError": {
"request-id": "bab6035c-17c5-45ea-99ac-7c809e446ca2",
"date": "2018-12-22T09:42:03"
}
}
解决方案
首先,您的令牌似乎不正确。所以第 1 步是验证令牌是否正确。您可以通过复制您的令牌并将其粘贴到 Microsoft 专门为此工作创建的网站上来做到这一点。https://jwt.ms
其次,正如微软文档所描述的,您有两种将文件上传到 onedrive 的方法。
您正在尝试直接上传到CreateUploadSession
端点。第一种方法(对于小文件)通过将文件上传到/content
端点来工作,但这只是一个文件上传。所以其中没有内容标题json
。
第二种方法通过创建一个上传会话(以一些 json 响应)然后执行第二个请求以将文件上传到您从 url 获得的端点。
关于这些东西的文档非常清楚,我认为您正在使用 PHP,因此使用 php 模仿提供的 curl 请求应该很容易。
推荐阅读
- spring - 使用 Corda 运行 Spring 服务器时出现 Quasar 错误
- ios - 从 iOS 中的 UIWebView 中删除粗体、斜体和下划线选项
- linux - Fedora 28 / GLIBC 2.27 libm.so.6 logf() 和 powf() c++
- c# - C# 将 Selenium 与 Chrome 便携版和 driver.Navigate().GoToUrl 一起使用
- excel - 将某些单元格从更改数量的工作表复制到新行
- javascript - Discord 如何在所有平台上运行?
- twitter - Discord Bot:仅发布包含关键字的推文
- java - 检查输入字符串是否包含标点符号字符串中的任何标点符号的有效方法
- c++ - 类 C++ 中数组元素的 Getter 和 Setter
- android - 为什么我的标签在 Xamarin 表单中的框架内不可见?