【问题标题】:Not able to download files from inside folder, OneDrive, Microsoft Graph, Python无法从内部文件夹、OneDrive、Microsoft Graph、Python 下载文件
【发布时间】:2020-05-09 10:55:07
【问题描述】:

我正在尝试使用 microsoft graph api 从 onedrive 下载文件,我在文件夹“新文件夹”中有名为“Knox EARNSTSALV2020.xlsx”的文件,但出现错误,我可以从文件夹外部下载文件。

错误:

b'{\r\n  "error": {\r\n    "code": "itemNotFound",\r\n    "message": "Item not found",\r\n    "innerError": {\r\n      "request-id": "8c4f973a-cd22-48eb-bdfd-f5eb8a051389",\r\n      "date": "2020-05-09T10:55:40"\r\n    }\r\n  }\r\n}'

代码参考:Download files from personal OneDrive using Python

import sys, os, time, requests
import pandas as pd
import urllib.parse

OneDrive_FilePath = 'New Folder/Knox EARNSTSALV2020.xlsx'

OneDrive_FileURL = 'https://graph.microsoft.com/v1.0/me/drive/root:/' + OneDrive_FilePath + ':/content'
OneDrive_FileURL = urllib.parse.quote(OneDrive_FileURL, safe=':/')
print(OneDrive_FileURL)

Client_Id = 'XXXX'
Tenant_Id = 'YYYYY'
Refresh_Token_First = 'ZZZZZ'

PostStr = {'grant_type': 'refresh_token', 'client_id': Client_Id, 'refresh_token': Refresh_Token_First}

Token_Response = requests.post('https://login.microsoftonline.com/' + Tenant_Id + '/oauth2/v2.0/token', data=PostStr)

Access_Token = Token_Response.json()['access_token']
New_Refresh_Token = Token_Response.json()['refresh_token']

if Access_Token is None or New_Refresh_Token is None:
    print('\n> Failed: Access_Token NOT Retrieved')
    sys.exit()

Response = requests.get(OneDrive_FileURL, headers={'Authorization': 'Bearer ' + Access_Token})

if Response.status_code == 200:
    print('\n> Response Success')

    with open('Excel File.xlsx', 'wb') as File:
    File.write(Response.content)
    print('\n> File Downloaded')
else:
    print('\n> Failed:', Response.status_code)
    print(Response.content)

【问题讨论】:

  • 只是想知道用New%20Folder/Knox%20EARNSTSALV2020.xlsx 替换New Folder/Knox EARNSTSALV2020.xlsx 是否会有所帮助?
  • @GauravMantri-AIS, urllib.parse.quote(OneDrive_FileURL, safe=':/'),它很小心,但没有运气
  • @SPy - 我正在解决类似的问题,并按照您的代码进行操作,它确实有效。请问这个方法下载的文件存储在哪里?谢谢

标签: python-3.x azure python-requests microsoft-graph-api onedrive


【解决方案1】:

我的路径中也有空格,我不使用urllib.parse.quote。尝试调用 get 请求:https://graph.microsoft.com/v1.0/me/drive/root:/New Folder/Knox EARNSTSALV2020.xlsx:/content

【讨论】:

  • 我试过但没有运气!,我们需要添加以下权限吗? Directory.AccessAsUser.All、Directory.Read.All、Directory.ReadWrite.All、
  • 我只有 User.Read 权限。尝试从文件名中取出空格。我注意到我的文件没有空格,即使目录有。
  • @dont know 突然开始运作而没有任何改变
  • 非常感谢...另外我在从共享文件夹下载时遇到一些问题:stackoverflow.com/questions/61700031/…,您有什么解决方案吗?我想从其他域 onedrive 用户共享的文件夹中下载一些文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多